spring - 组件扫描未按预期工作
问题描述
我有两个不同的应用程序,一个用于商业,一个用于休息。它们都存在于一个 EAR 中。休息是一场战争,生意是一个罐子。我在 Rest 应用程序中使用业务 jar。
在业务应用程序中,我使用 @component 注释对服务接口进行了注释。
业务模块 -- com.test.project.service -- 包名 BaseService.java -- 我试图在我的 Rest Controller 中自动装配的接口
REST 模块 com.test.project.controller -- 包名 BaseServiceController -- 我试图自动连接 BaseService.java 的控制器类
调度程序-servlet.xml
要在“com.test.project”包中注册我的业务和控制器类,我提到了 XML 配置,因为容器无法在 BaseServiceController.java 中自动连接 BaseService.java,我得到 BeanCreationException
但是,如果我提到我的基本包名称为“com.test.project.service”,BaseService.java 将自动连接到 BaseServiceController.java,但如果我试图在控制器中命中一个端点,我会得到 404,因为控制器是未在容器中注册
下面是我的 dispatcher-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.test.project" />
<mvc:annotation-driven/>
<context:annotation-config/>
</beans>
服务
public interface IBaseService {
public void postData(String request) throws CustomException;
}
控制器
@RestController
@RequestMapping("/baseRequest")
public class BaseServiceController{
@Autowired
private IBaseService baseService;
//private static final Logger log = LoggerFactory.getLogger(BaseServiceController.class);
@RequestMapping(value = "/testRequest", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON)
public String invokeInfo() throws CustomException{
return "Spring Test";
}
}
下面是例外
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private ; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1218)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:778)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:666)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:632)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:680)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:551)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:492)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:161)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:342)
... 91 more
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
... 109 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1380)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1126)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1021)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
... 111 more
解决方案
如下创建一个新类
IBaseServiceImpl.java
@Service
public class IBaseServiceImpl implements IBaseService {
//Implement defined methods in interface IBaseService
}
推荐阅读
- android - 路线不会使用“Google-Directions-Android”库在地图上绘制
- python - 如何通过 Djangae 提高 Google Cloud Datastore 中的查询性能?
- python - python中的路径解析和拟合
- python - 无法在 python 中安装多变量包
- batch-file - 每天根据文件名通过批处理文件保存一个文件
- c# - 通过 localhost 连接到远程
- java - 在 netbeans 中构建一个胖罐
- javascript - 剑道网格和 Jquery 复选框值
- python - 如果我尝试在 python 中关闭当前窗口,则 Windows 处理关闭整个浏览器
- r - 如何在着色点时将文本添加到分面图?