java - 在 Spring MVC 中无法从单独的服务包中找到 bean

标签 java spring eclipse spring-mvc autowired

我得到的错误是NoSuchBeanDefinitionException, 我目前正在开发一个网络应用程序来集成一些数据库功能。 我的结构如下

domain.mainpackage
    +ControllerClass
    +SomeOtherClass
domain.DAOpackage
    +someDAOClass
    +someDAOimpl
domain.service
    +MainService
    +MainServiceImpl

我遇到的问题是构建应用程序时 Controller 无法找到 MainServiceClass 的 bean(请参阅下面的错误)

Nov 22, 2018 11:43:01 AM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'applicationController': Unsatisfied dependency expressed through field 'mainService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'domain.service.MainService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1272)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:171)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1124)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1079)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:971)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4829)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5143)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3716)
    at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:292)
    at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5465)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1396)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1400)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1400)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1368)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'domain.service.MainService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
    ... 33 more

我已将我的实现类注释为@Service

    @Service
    public class MainServiceImpl implements someDAOClass{
    @Autowired
    private someDAOClass someDAOClass1;
    @Transactional
    public list<someDAOClass> getSomeDAOClass(){
    //return statement here
    }
}

此外,我的 DAO 类被注释为 @Repository,非事务性的。昨天我仅使用 DAO 就达到了预期的结果,但现在我进行了更改,我不确定为什么它不能一起工作。

我尝试在我的 Controller 上使用@ComponentScan,以防万一,但那是徒劳的。 由于我使用的是 STS(Eclipse),看来我无法创建根包并将 Controller 保留在那里,正如另一篇 SO 帖子中建议的解决方案一样。因此,除了更改系统资源管理器中的架构之外,我正在寻找其他解决方案。

最佳答案

您的服务实现类应该实现Service而不是DAO

@Service
public class MainServiceImpl implements MainService {

您应该定义您的 bean,例如:

@Bean
public MainService mainService(){
    return new MainServiceImpl ();
}

关于java - 在 Spring MVC 中无法从单独的服务包中找到 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53430612/

相关文章:

java - 使用线程隔离应用程序功能

java - Spring Integration 在有效负载表达式中组合路径变量和发布主体

java - java spring如何自定义@NotNull验证错误信息

java - 在Spring框架应用程序中使用new?

java - RMI 远程异常。 RMI 不工作

javascript - XML 中的 Eclipse JavaScript 支持

java - 如何增加 Eclipse ADT Bundle 的 Java 堆空间

java - 将数组插入 hashmap 而不创建新数组

java - Android JNI java.lang.NoSuchMethodError : no non-static method

java - 异常说明 "Resetting to invalid mark "在标记 inputStream 并重置它时出现,对于大文件。?