弹簧使用的代理模式

时间:2016-04-15 03:21:11

标签: java spring proxy

我正在学习春天:)

我有疑虑,

  1. Spring是否为每个bean创建代理对象,即使我没有使用注释,例如我认为需要代理的@Transactional。
  2. 我在spring documentation
  3. 中阅读了以下内容
      

    请注意,对静态@Bean方法的调用永远不会被容器拦截,甚至在@Configuration类中也不会被拦截(参见上文)。这是由于技术限制:CGLIB子类化只能覆盖非静态方法。因此,直接调用另一个@Bean方法将具有标准的Java语义,从而导致直接从工厂方法本身返回一个独立的实例。

    一个。 Spring在以下示例中不返回代理对象,因为静态方法无法覆盖。所以它会在这里返回原始对象。我是对的吗?

       @Configuration
       public class Config {
           @Bean
           public static Student student() {
               return new Student();
           }
       }
    

    湾是什么意思"请注意,对静态@Bean方法的调用永远不会被容器拦截,甚至在@Configuration类中也不会被拦截"

1 个答案:

答案 0 :(得分:3)

一个。是的,你是对的。您将获得原始对象。

湾student()方法位于使用@Configuration批注注释的类Config中。所有在@Configuration类中使用@Bean注释的方法都是由spring通过创建代理来截获的。因此,您的方法是静态的,虽然它在Config类中,但它不会被Spring拦截,也不会创建任何代理。