我无法弄清楚为什么自动装配不能正常工作。我有一个使用spring 3的非Web应用程序,因此在应用程序的main方法中我设置了这样创建应用程序上下文:
ApplicationContext ctx = new ClassPathXmlApplicationContext(
DEFAULT_APP_CONTEXT);
.xml
文件顶部有自动装配工作所需的东西:
<context:annotation-config />
<context:component-scan base-package="star,hw" />
然而它不起作用。我在@Repository
包下有一个类级hw
注释的服务类,但在尝试@Autowire
时,我得到了:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'inventoryDAO' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:527)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1083)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:274)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
... 77 more
我在日志文件中注意到一个奇怪的事情:
Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@4440ece0: defining beans [*skipping*, inventoryDAOImpl, *skipping*]
这是我@Repository
使用的课程,但它实现了InventoryDAO
。它显示inventoryDAOImpl
并没有错吗?我该怎么做才能找出问题所在?
编辑:好的,可能问题不在@Autowire
而在@Repository
中,因为没有正确使用bean。
答案 0 :(得分:1)
尝试@Repository("inventoryDAO")
。