【问题标题】:Is a proxy created for each Bean in Spring?Spring 中是否为每个 Bean 创建了代理?
【发布时间】:2020-05-23 14:25:12
【问题描述】:

所以,我在网上阅读,您无法将 Configuration 设为 final,因为 CGLIB 扩展了该类以创建代理。但是,我正在阅读@Scope 的文档,默认的 proxyMethod 值是没有创建代理(链接在这里-https://docs.spring.io/springframework/docs/current/javadoc-api/org/springframework/context/annotation/Scope.html)。

所以,我的主要问题是,是否为每个 @Configuration 创建了一个代理?

【问题讨论】:

  • 作用域和代理是完全不同的东西。当作用域需要时,会为作用域创建代理,但不会为单例或应用程序作用域的 bean 创建代理。即使是单例也可能基于其他方面(如事务、重试等)进行代理。 @Configuration可能被代理取决于proxyBeanMethods 属性(默认为true)。

标签: java spring spring-boot aop spring-aop


【解决方案1】:

Spring 仅在需要时为 bean 创建代理(例如:事务管理)。我已经为另一个 SO 问题 here 解释了这一点,请通过答案的 A2 部分了解更多详细信息。

对于带有@Configuration 注释的类,将始终创建代理,这意味着它是必需的。为什么需要它可以从以下参考资料中理解。

@Bean:通读@Configuration 类中的@Bean 方法@Bean Lite 模式

部分

请通读@kriegaex 的this 优秀答案,以了解@Configuration 类的内部工作原理。

那么回答你的问题是否为每个@Configuration 创建了一个代理?是的,除非明确配置了 @ConfigurationproxyBeanMethods

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2016-09-25
    相关资源
    最近更新 更多