在看Spring原始碼,測驗到了一個地方有點不解。
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring-test-bean.xml"));在這個xml里面手動配置一個bean,在Spring載入的程序中,xml里面bean會被放在beanFactory中,但是其他的通過注解的注入bean的此時卻不在。
public void xmlbeanFactoryResource() throws IOException {
BeanFactory factory = new XmlBeanFactory(new ClassPathResource(
"spring-test-bean.xml"));
//getBeanTest xml 注入,有值
GetBeanTest beanTest = (GetBeanTest) factory.getBean("getBeanTest");
beanTest.beanTest();
//personArtServiceimpl @service注入 factory 無值,報錯
System.out.println(factory.getBean("personArtServiceimpl"));
}有沒有朋友能告訴我為什么呢。自動注解是什么時候注入的呢(ApplicationContext我也是過了也是這樣)。
我的想法是再啟動Spring的程序中,Spring 應該會先把組態檔中的bean注入,在去按照掃描規則找注解注入的。但是,代碼就那么幾行,他在哪里注入的注解bean呢?
uj5u.com熱心網友回復:
servlet在 init的時候 createaplicationcontext 載入xml檔案,載入之前 他會銷毀之前的uj5u.com熱心網友回復:
ComponentScanBeanDefinitionParser 類中的parse方法,掃描類的時候加載uj5u.com熱心網友回復:
可是,application里面沒有
uj5u.com熱心網友回復:
你沒有掃描類,注解bean肯定就沒有啊uj5u.com熱心網友回復:
xml檔案里面你對personArtServiceimpl所在的包進行掃描了么uj5u.com熱心網友回復:
你配置了context:component-scan嗎,并且base-package要覆寫你的類所在包原始碼可以看ContextNamespaceHandler,里面有關于component-scan處理類的注冊,會呼叫ComponentScanBeanDefinitionParser.parse方法進行具體的操作
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/104546.html
標籤:Java EE
