Spring 中的 ProxyBeanMethods

kun*_*gho 2 java spring spring-mvc spring-boot

有人可以举一个真实的案例来说明使用布尔元素proxyBeanMethods将如何改变应用程序 bean 之间的交互方式吗?根据我的理解设置proxyBeanMethodstofalse类似于@Lazy在 bean 的依赖项上使用注释,其中这些依赖项只会在返回它们的方法被调用后才会被创建,因此提高了启动速度。有什么我想念的吗?

M. *_*num 8

@Lazy与该属性的javadoc中的解释不同。

默认值true意味着每个@Bean方法都将通过 CgLib 进行代理。对该方法的每次调用都将通过代理并假设单例作用域 bean,每次调用该方法时它将返回相同的实例。

将其设置为false不会创建此类代理方法时,每次调用该方法都会创建 bean 的一个新实例。它将充当工厂方法。这基本上是一样的所谓的豆精简版模式,或@Bean在非方法@Configuration注释类。

现在后者与@Lazy只会将构建推迟到需要的那一刻不同。

  • 它可能会稍微缩短启动时间,因为它不需要为配置类创建代理。然而,请谨慎使用,因为它会改变方法的行为(并且可能最终会创建一个 bean 的多个实例,而不是单个实例!特别是与“@Lazy”结合使用时,因为每次调用都会创建一个新实例,从而有效地导致原型作用域 bean !)。 (3认同)