@Configuration@ComponentScan("com.zs.cglib")//這個類作為配置類publicclassCglibConfig{@Beanpublic TestDomain testDomain(){returnnewTestDomain();}@Beanpublic TestDomainTwo testDomainTwo(){//這個方法會預先調用上一個方法testDomain();returnnewTestDomainTwo();}}@Component("testDomain")publicclassTestDomain{publicTestDomain(){//構造參數打印,證明被調過System.out.println("new TestDomain-------------");}}@Component("testDomainTwo")publicclassTestDomainTwo{publicTestDomainTwo(){//構造參數打印,證明被調過System.out.println("new TestDomainTwo-------------");}}publicclassStartMain{//啟動測試publicstaticvoidmain(String[] args){AnnotationConfigApplicationContext anno =newAnnotationConfigApplicationContext(CglibConfig.class);System.out.println(anno.getBean(TestDomain.class));System.out.println(anno.getBean(TestDomainTwo.class));}}
可以發現,如果CglibConfig加上@Configuration,就會打印出: new TestDomain------------- new TestDomainTwo------------- 如果把@Configuration去掉,就會打印出: new TestDomain------------- new TestDomain------------- new TestDomainTwo------------- 也就是說,加上@Configuration,new出TestDomain實例只執行了一次,也就是說testDomainTwo()中調用的testDomain(),并沒有new出新的TestDomain實例。 而把@Configuration去掉,TestDomain實例就會被new兩次,也就是testDomainTwo()中調用的testDomain()也有new出TestDomain實例。