如果所有类都不在同一个包中,Spring @autowired将不起作用

我有四个包:

  1. com.spring.org

档案: HomeController.java

  1. com.spring.org.dao

档案:SubscriberDao.javaSubscriberDaoImpl.java

  1. com.spring.org.model

档案: Subscriber.java

  1. com.spring.org.service

档案:SubscriberService.javaSubscriberServiceImpl.java

我根据类型将所有控制器类放在 **com.spring.org** 包中,将其他控制器类放在不同的包中。如果我运行我的应用程序,则会收到以下错误消息:

_没有发现类型为[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" />

您可以在http://postimg.org/image/s6bnjccrn/上看到我的servlet-

context.xml文件的代码。

你能告诉我如何解决这个问题吗?

如果您需要查看其他文件,请告诉我。

更新资料

我的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

档案

如果将所有代码粘贴到此处,将很难遵循,因此,我将整个项目上传到了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"/>

@Controller

public class HomeController {

@Autowired

@Qualifier("Subscriber")

private SubscriberService subService;

}

从此 参考。希望这能够帮到你....

根据您的包结构,您的 类位于 包 只需使用 更改您的基本包,这将对您

<context:component-scan base-package="com.spring"/>

以上是 如果所有类都不在同一个包中,Spring @autowired将不起作用 的全部内容, 来源链接: utcz.com/qa/425303.html

回到顶部