2016-05-29 138 views
0

我正在开发Spring 4 MVC项目来学习spring rest框架。这是一个课程项目,我正在创建一个Web应用程序。我已经设法从各种教程在线编写一些Spring代码。我收到豆autowiring的问题。spring bean不能autowire

错误

Could not autowire field: taxApp.dao.daoImpl.userDaoImpl taxApp.controller.loginController.userService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [taxApp.dao.daoImpl.userDaoImpl] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency 

这些是示例文件

loginController.java

@RestController 
public class loginController { 
    @Autowired 
    userDAO userService; //Service which will do all data retrieval/manipulation work 
    //other methods 
} 

userDAO.java

public interface userDAO { 
    public void insert(user _user); 
    public user findUserByEmail(String email); 
} 

userDaoImpl.java

@Service("userDAO") 
public class userDaoImpl implements userDAO{ 
    @Autowired 
    private DataSource dataSource;  

    //other methods 
} 

我已经创建了配置文件,但不确定它们是否放置正确。例如我的dispatcher.xml在web-inf文件夹中,而其他xml文件在资源中。还要确保类路径在所有方面都是正确的。

调度-servlet.xml中

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" 
    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/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context.xsd"> 

    <mvc:annotation-driven/> 
    <context:component-scan base-package="taxApp" /> 
    <context:annotation-config /> 

    <bean 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix"> 
     <value>/WEB-INF/pages/</value> 
    </property> 
    <property name="suffix"> 
     <value>.jsp</value> 
    </property> 
    </bean> 

</beans> 

弹簧user.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    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-2.5.xsd"> 

    <bean id="userDAO" class="dao.impl.userDaoImpl"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

</beans> 

弹簧module.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    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"> 

    <!-- Using Oracle datasource --> 
    <import resource="database/data-source-cfg.xml" /> 
    <import resource="dao/spring-user.xml" /> 

</beans> 

的web.xml

<web-app> 
    <display-name>Archetype Created Web Application</display-name> 

    <!-- Spring MVC --> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 

     <servlet-class> 
      org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 

     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

我的春天项目的结构看起来像

src 
    main 
     java 
      taxApp 
       controller 
          loginController.java 
       model 
         user.java 
       dao 
        userDaoImpl.java 
        userDAO.java 
     resources 
       database 
         data-source-cfg.xml 
       user 
        spring-user.xml 
       spring-module.xml 
     webapp 
      web-inf 
        dispatcher-servlet.xml 
        web.xml 
      index.jsp 
+2

您的命名选择不好;它们都不遵循Java编码标准。你在使用Spring 4;我建议不要混合使用XML和注释。始终如一。启动时的信息应该明确什么是加载和什么不是。 – duffymo

回答

0

我没有看到调度员servlet.xml中的任何地方你有进口弹簧module.xml。这就是你的bean没有在sprint环境中加载的原因。

0

你不必在你的类路径下面的类,

<bean id="userDAO" class="dao.impl.userDaoImpl"> 

它应该是什么,

<bean id="userDAO" class="taxApp.dao.userDaoImpl"> 

这是因为xml配置优先于Java配置,并且xml配置已损坏。

此外,如果您从xml中删除了以上userDAO bean声明,它将自动使用@Service("userDAO")进行选择,它应该可以工作。

但是,你不应该不应该同时使用Java和xml配置,而不会理解Spring。而你的命名转换不可能是java。