Discuss / Java / @Configuration这个注解去掉也一样运行

@Configuration这个注解去掉也一样运行

Topic source

Loading...

#1 Created at ... [Delete] [Delete and Lock User]

@Configuration这个注解去掉也一样运行。

@ComponentScan
@Configuration
@ComponentScan可以理解扫描类,创建对象,@Configuration这个注解到底干了啥

越学感觉对底层一点不了解。直接从注解反射跳到spring,人家怎么实现的,干了啥一点不知道

@Configuration注解的作用是启用完全模式,如果没有该注解,会默认启用精简模式。精简模式下的@Bean方法无法调用另一个@Bean方法,而完全模式可以。因此@Bean注解所在类一般都会标注上@Configuration注解,第一个作用是启用完全模式,第二个作用就是显式标记这个类是配置类,而非一个普通的JavaBean。

这些spring的官方文档上都有写,要想深入了解spring,还需学习源码。一般来说会用就行了。

关于@Configuration精简模式的解释存在问题,现在修正一下:

精简模式下@Bean方法是可以调用另一个@Bean方法的,但它的缺陷是被调用的@Bean方法产生的实例在容器中不是唯一的,例如:

AppConfig{
    @Bean
    A getA(){
        System.out.println(getB() == getB()); //结果是false,说明每调用一次getB()都会产生新的实例。加上@Configuration之后结果就是true了。
        return new A();
    }

    @Bean
    B getB(){
        return new B();
    }
}

因此,更准确的说法是,在完全模式下,一个@Bean方法可以正确地调用另一个@Bean方法,从而正确地装配Bean。


  • 1

Reply