【发布时间】:2014-09-05 10:17:45
【问题描述】:
我有四个包:
-
com.spring.org
文件:
HomeController.java -
com.spring.org.dao
文件:
SubscriberDao.java,SubscriberDaoImpl.java -
com.spring.org.model
文件:
Subscriber.java -
com.spring.org.service
文件:
SubscriberService.java,SubscriberServiceImpl.java
我将所有控制器类放在 com.spring.org 包中,而其他控制器类则根据其类型放在不同的包中。如果我运行我的应用程序,我会收到以下错误消息:
HTTP 状态 500 - Servlet appServlet 的 Servlet.init() 抛出异常 没有为依赖找到类型为 [com.spring.org.service.SubscriberService] 的合格 bean:预计至少有 1 个 bean 有资格作为此依赖的自动装配候选者.....
仅供参考:我在控制器中使用自动连线注释,如下所示:
@Autowired
private SubscriberService subService;
但是,如果我将所有类和接口都放在 com.spring.org 包中,那么我的应用程序就可以完美运行。
我已经尝试在我的 servlet-context.xml 文件中使用这些标签来解决问题,但仍然没有用:
<annotation-driven />
<context:annotation-config />
<context:component-scan base-package="com.spring.org.**" />
<context:component-scan base-package="com.spring.org.dao" />
<context:component-scan base-package="com.spring.org.model" />
<context:component-scan base-package="com.spring.org.service" />
我也只试过这个:
<context:component-scan base-package="com.spring.org" />
你可以在这里看到我的servlet-context.xml文件的代码http://postimg.org/image/s6bnjccrn/
你能告诉我如何解决这个问题吗?
如果您需要查看任何其他文件,请告诉我。
更新
我的 SubscriberService 代码:
@Service
public interface SubscriberService {
public void addSubscriber(Subscriber subscriber);
public void updateSubscriber(Subscriber subscriber);
public Subscriber getSubscriberById(int subId);
public List<Subscriber> listSubs();
public int removeSubscriber(int subId);
}
根本原因
org.springframework.beans.factory.BeanCreationException:创建名为“homeController”的bean时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 com.spring.service.SubscriberService com.spring.org.HomeController.subService;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为 [com.spring.service.SubscriberService] 的合格 bean:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=)} org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
文件
如果我把所有的代码都贴在这里会很难理解,所以我把我的整个项目上传到这里https://www.mediafire.com/?crxe7vt7uwyqwtl。我正在使用 Eclipse IDE。
【问题讨论】:
-
问题可能不在于扫描或配置。请发布
com.spring.org.service.SubscriberService的代码及其实现。 -
感谢您的回复,请查看我问题的更新部分
-
对于初学者来说,你的基础包是错误的,删除
.**。还要确保将注释放在实现而不是接口上。如果它在接口上,则不会发生任何事情(这就是注释的本质,它们不会从接口继承到类!)。 -
@M.Deinum 我尝试删除 .** 但它不起作用。而且我的接口和实现类中都有注释
-
请添加您的 SubscirberDao.java 、 SubscirberDaoImpl.java 和 HomeController.java 的整个代码,以便我们了解问题的原因...
标签: java spring spring-mvc