如果所有类都不在同一个包中,Spring @autowired将不起作用
我有四个包:
- 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** 包中,将其他控制器类放在不同的包中。如果我运行我的应用程序,则会收到以下错误消息:
_没有发现类型为[com.spring.org.service.SubscriberService]的合格Bean作为依赖项:预计至少有1个Bean可以作为此依赖项的自动装配候选…
.._
仅供参考:我在控制器中使用自动有线标注,如下所示:
@Autowiredprivate 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" />
您可以在http://postimg.org/image/s6bnjccrn/上看到我的servlet-
context.xml文件的代码。
你能告诉我如何解决这个问题吗?
如果您需要查看其他文件,请告诉我。
更新资料
我的SubscriberService代码:
@Servicepublic 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
。
档案
如果将所有代码粘贴到此处,将很难遵循,因此,我将整个项目上传到了https://www.mediafire.com/?crxe7vt7uwyqwtl
。我正在使用Eclipse IDE。
回答:
你的结构应该是这样的
package com.spring.org.service;public interface SubscriberService {
}
package com.spring.org.service;@Component
@Qualifier("Subscriber")
public class SubscriberServiceImpl implements SubscriberService {
}
“ SubscriberServiceImpl1”是一个组件,它实现了“ SubscriberService”。
package com.spring.org.service;@Component
@Qualifier("Subscriber1")
public class SubscriberServiceImpl1 implements SubscriberService {
}
我设置了一个Spring上下文,该上下文扫描这两个软件包中是否有标记为’@Component’的bean。
<annotation-driven /><context:annotation-config />
<context:component-scan base-package="com.spring"/>
@Controllerpublic class HomeController {
@Autowired
@Qualifier("Subscriber")
private SubscriberService subService;
}
从此 参考。希望这能够帮到你....
根据您的包结构,您的 类位于 包 只需使用 更改您的基本包,这将对您
<context:component-scan base-package="com.spring"/>
以上是 如果所有类都不在同一个包中,Spring @autowired将不起作用 的全部内容, 来源链接: utcz.com/qa/425303.html