[英]Spring3's @Configuration cannot @Inject component-scanned beans
這是我的app.xml:
<context:component-scan base-package="destiny.web" />
<context:annotation-config/>
並有一個Dao
(接口),和DaoImpl
(帶有加注解的@Repository
)destiny.web封裝內。
還有另一個Spring3的destiny.web.AppConfig類:
@Configuration
public class AppConfig
{
@Inject
private Dao daoImpl
public AppConfig()
{
System.out.println("dao = " + daoImpl);
}
}
它打印'null',為什么?
我確信所有這些bean /配置/存儲庫都會被掃描。 但似乎@Configuration不知道其他掃描的bean。 我錯過了什么嗎?
我嘗試通過@ImportResource來解決它:
@Configuration
@ImportResource("classpath:app.xml")
public class AppConfig
但它似乎導致循環bean掃描並拋出此異常:
{main} org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Only one AsyncAnnotationBeanPostProcessor may exist within the context.
Offending resource: class path resource [app.xml]
怎么解決?
謝謝。
before inject / autowiring
另一個組件before inject / autowiring
Spring將invoke constructor firstly
。 因此,當您在構造函數中打印時,您的dao為null,因為dao still not injected yet
。
嘗試為您的configapp創建測試應用程序。
public class Main {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("stackoverflow.xml");
AppConfig appConfig = context.getBean(AppConfig.class);
appConfig.getConfig("smtp.host");
}
}
你有沒有使用@Autowired
注釋而不是@Inject
嘗試它?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.