首页 文章

Spring引导应用程序不会使控制器类抛出异常

提问于
浏览
0

我已经通过在pom.xml中添加插件和Spring Boot依赖项将现有的spring应用程序转换为Spring Boot应用程序 . 这是我的pom.xml:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.1.9.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- tag::actuator[] -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!-- end::actuator[] -->

    <!-- Spring Security -->  
    <dependency>  
      <groupId>org.springframework.security</groupId>  
      <artifactId>spring-security-core</artifactId>  
      <version>3.2.5.RELEASE</version>  
    </dependency>  

    <dependency>  
      <groupId>org.springframework.security</groupId>  
      <artifactId>spring-security-web</artifactId>  
      <version>3.2.5.RELEASE</version>  
    </dependency>  

    <dependency>  
      <groupId>org.springframework.security</groupId>  
      <artifactId>spring-security-config</artifactId>  
      <version>3.2.5.RELEASE</version>  
    </dependency>
    <!-- Spring Security --> 

    <!-- odbc -->
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc14</artifactId>
        <version>10.2.0.2.0</version>
    </dependency>
    <!-- odbc -->

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

以下是我的控制器类:

@Controller
@ComponentScan("com.eg.example.controller")
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    @Autowired
    private DatabaseDAO dao;

    /*some code */

}

以下是DatabaseDAO.class

public class DatabaseDAO {
    /*dao sepcific code*/
}

现在运行maven安装后,jar在目标文件夹中构建,当我从命令提示符运行jar时,我收到以下错误:

错误SpringApplication - 应用程序启动失败org.springframework.beans.factory.BeanCreationException:创建名为'homeController'的bean时出错:注入自动连接的依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private com.eg.example.dao.DatabaseDAO com.eg.example.controller.HomeController.dao;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到类型为[com.eg.example.dao.DatabaseDAO]的限定bean依赖:预期至少有1个bean符合此依赖关系的autowire候选者 . 依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:301)〜[spring-beans-4.0 .8.RELEASE.jar!/:4.0.8.RELEASE]在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1186)〜[spring-beans-4.0.8.RELEASE.jar! /:4.0.8.RELEASE]在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)〜[spring-beans-4.0.8.RELEASE.jar!/:4.0.8.RELEASE在Org.springframework.beans的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)〜[spring-beans-4.0.8.RELEASE.jar!/:4.0.8.RELEASE] .factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:302)〜[spring-beans-4.0.8.RELE ASE.jar!/:4.0.8.RELEASE]在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)~ [spring-beans-4.0.8.RELEASE.jar!/:4.0 .8.RELEASE] org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)〜[spring-beans-4.0.8.RELEASE.jar!/:4.0.8.RELEASE] at org org.springframework.beans.factory上的.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)〜[spring-beans-4.0.8.RELEASE.jar!/:4.0.8.RELEASE] . org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java)中的support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:706)〜[spring-beans-4.0.8.RELEASE.jar!/:4.0.8.RELEASE] :762)〜[spring-context-4.0.8.RELEASE.jar!/:4.0.8.RELEASE] org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)〜[spring- context-4.0.8.RELEASE.jar!/:4.0.8.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:109)〜[spring-boot-1.1.9.RELEASE .jar!/:1.1.9.RELEASE]在org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691)[spring-boot-1.1.9.RELEASE.jar!/:1.1.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)[spring-boot-1.1.9.RELEASE.jar!/:1.1.9.RELEASE]在org.springframework.boot.SpringApplication.run(SpringApplication . java:952)[spring-boot-1.1.9.RELEASE.jar!/:1.1.9.RELEASE] org.springframework.boot.SpringApplication.run(SpringApplication.java:941)[spring-boot-1.1.9 .RELEASE.jar!/:1.1.9.RELEASE]在com.ge.ideate.Application.main(Application.java:17)[gs-spring-boot-0.1.0.jar!/:na] at sun . 在sun.reflect.DelegatingMethodAcc的sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)〜[na:1.7.0_51]的reflect.NativeMethodAccessorImpl.invoke0(原生方法)〜[na:1.7.0_51] essorImpl.invoke(未知来源)〜[na:1.7.0_51] at java.lang.reflect.Method.invoke(未知来源)〜[na:1.7.0_51] at org.springframework.boot.loader.MainMethodRunner.run( MainMethodRunner.java:53)[gs-spring-boot-0.1.0.jar!/:na] at java.lang.Thread.run(Unknown Source)[na:1.7.0_51]引起:org.springframework.beans .factory.BeanCreationException:无法自动装配字段:private com.eg.example.dao.DatabaseDAO com.eg.example.controller.HomeController.dao;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到类型为[com.eg.example.dao.DatabaseDAO]的限定bean依赖:预期至少有1个bean符合此依赖关系的autowire候选者 . 依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:522)〜[spring-beans -4.0.8.RELEASE.jar!/:4.0.8.RELEASE]在org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)〜[spring-beans-4.0.8.RELEASE . jar!/:4.0.8.RELEASE]在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:298)〜[spring-beans-4.0.8.RELEASE.jar!/:4.0.8 .RELEASE] ...省略了22个常见帧引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到类型为[com.ge.ideate.dao.IdeateDAO]的限定bean依赖:期望至少有1个符合条件的bean作为此依赖关系的autowire候选者 . 依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)} org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1118)~ [spring-beans-4.0 .8.RELEASE.jar!/:4.0.8.RELEASE]在org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:967)〜[spring-beans-4.0.8.RELEASE.jar! /:4.0.8.RELEASE]在org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:862)〜[spring-beans-4.0.8.RELEASE.jar!/:4.0.8.RELEASE在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:494)〜[spring-beans-4.0.8.RELEASE.jar!/:4.0.8.RELEASE] ... 24常见的框架在su的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)中省略了java.lang.reflect.InvocationTargetException位于org.springframework.boot.loader.MainMethodRunner.run的java.lang.reflect.Method.invoke(未知来源)的sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)的n.reflect.NativeMethodAccessorImpl.invoke(未知来源) MainMethodRunner.java:53)at java.lang.Thread.run(Unknown Source)由以下引起:org.springframework.beans.factory.BeanCreationException:创建名为'homeController'的bean时出错:注入自动连接的依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private com.ge.ideate.dao.IdeateDAO com.ge.ideate.controller.HomeController.dao;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为[com.ge.ideate.dao.IdeateDAO]的限定bean:期望至少有一个bean符合此依赖关系的autowire候选资格 . 依赖注释:{org.springframework.beans.factory.annotation.Autowired(required = true)}位于org.springframework.beans的org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:301) . 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)上的factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1186)位于org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:302)的org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)处的AbstractAutowireCapableBeanFactory.java:475) org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java :298)org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:706)at atorg.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:762)位于org.springframework.boot.context.embedded.EmbeddedWebApplicationContext的org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) . 刷新(EmbeddedWebApplicationContext.java:109)在org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691)在org.springframework.boot.SpringApplication.run(SpringApplication.java:320)在org.springframework.boot.SpringApplication .RUN(SpringApplication.java:952)在org.springframework.boot.SpringApplication.run(SpringApplication.java:941)在com.ge.ideate.Application.main(Application.java:17)... 6更

我无法弄清楚错误的位置,请帮我解决这个问题 . 这是我的servlet-context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        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">

    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

    <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven />

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/" />

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

        <context:component-scan base-package="com.eg.example.*" />

</beans:beans>

1 回答

  • 1

    你应该在 DatabaseDAO 上面注释 @Repository . 由spring上下文导致的这个错误无法找到bean名称DatabaseDao将其注入 HomeController 组件 .

相关问题