[英]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.