2014-10-11 43 views
0

我正在尝试为学习目的开发一个spring-mvc 3 web应用程序。 作为一个新手我不是很好春天mvc。e的数据源不注入@controller在spring-mvc 3

所以这里是我的AdminDAO.java的数据源总是返回@Controller类空问题

@Controller 
public class adminPanel { 

    @Autowired 
    IAdminServices adminDAO; 

    @RequestMapping(value={"/adminPanel.spring"},method=RequestMethod.GET) 
    public String execute(@ModelAttribute Login login){ 
     return "adminpanel"; 
.... 
    } 

这里的数据源总是以空

注入她是我的应用程序上下文

<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-3.0.xsd"> 


    <bean id="datasource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="org.postgresql.Driver" /> 
     <property name="url" value="jdbc:postgresql://localhost:5432/librarysystem" /> 
     <property name="username" value="postgres" /> 
     <property name="password" value="postgres" /> 
    </bean> 

<bean id="adminDAO" class="in.kailash.DAO.AdminDAO"> 
    <property name="dataSource" ref="datasource" /> 
</bean> 

</beans> 

my IAdminServices.java

@Component 
public interface IAdminServices { 
    public String save(User user); 
    public String delete(User user,String id); 
    public String edit(User user,String id); 
    public List<User> viewAll(); 
    public String issue(); 
    public String returnBook(); 
    public String getStudentCardNumber(); 
} 

AdminDAO类实现IAdminServices.java

@Service 
public class AdminDAO implements IAdminServices { 

    DataSource dataSource; 

    public AdminDAO() { 
     super(); 
    } 

    public void setDataSource(DataSource dataSource) { 
     this.dataSource = dataSource; 
    } 

    @Override 
    public String save(User user) { 
     try { 
      Connection con = dataSource.getConnection(); 
      String sql = "insert into borrower(cardno,name,address,phone) VALUES(?,?,?,?)"; 
... 
.... 
} 

这里是我的MVC-servlet.xml中

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:component-scan base-package="in.kailash" /> 

    <context:annotation-config/> 
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/jsps/" /> 
     <property name="suffix" value=".jsp"/> 

    </bean> 
</beans> 

,这里是我的web.xml

 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns  /javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>LibSys</display-name> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
    <servlet-name>maincontroller</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>maincontroller</servlet-name> 
    <url-pattern>*.spring</url-pattern> 
    </servlet-mapping> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/maincontroller-servlet.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

</web-app> 

我的主要问题是,我总是得到datasource在@controller类中为null。 因为我是新手,所以欢迎任何有关如何安排Spring-mvc课程的进一步意见。

在此先感谢。


@Sotirios感谢您的耐心回复。根据你的建议,我已经在我的

的web.xml

做变化

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0"> 
<display-name>LibSys</display-name> 
<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 

<servlet> 
    <servlet-name>maincontroller</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/maincontroller-servlet.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>maincontroller</servlet-name> 
    <url-pattern>*.spring</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationcontext.xml</param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

不知怎的,数据源现在正注入。我只想确认一下,我这次做了这件事。如果你发现我的包中安排有任何问题,那么请评论

回答

0

我会假设你AdminDAO类的地方嵌套在这里宣布

<context:component-scan base-package="in.kailash" /> 

如果是这样的情况下,包里面,春天将产生AdminDAO类型的新豆,因为它注有@Service。它会处理这个bean,但不会自动调用它中的DataSource,因为你没有要求它。然后将这个AdminDAO bean注入到您的@Controller中,而不是从应用程序上下文中注入的那个。

相反,它似乎要使用您在应用程序上下文中声明的AdminDAO bean。

你有2种选择:

  • AdminDAO类中删除@Service注释,使春季正确地使用AdminDAO<bean>您在应用程序上下文中声明。
  • AdminDAO取出<bean>声明,并添加@AutowiredDataSource域或setter的回复
+0

亲爱的谢谢我AdminDAO是in.kailash.DAO包的内部,从我AdminDAO取出@services后得来的异常 BeanCreationException:创建名为'adminPanel'的bean时出错:注入自动装配依赖失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装入字段:in.kailash.services.IAdminServices in.kailash.controller.adminPanel.adminDAO;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有合格的bean类型[in.kailash.services.IAdminServices] – Adhikari 2014-10-11 17:44:20

+0

@ R's你能编辑你的问题并添加你的web.xml吗?你在哪里声明你的应用程序上下文? – 2014-10-11 17:46:52

+0

@ R的确定,所以现在没有任何意义。 'mvc-servlet.xml'是否意味着'maincontroller-servlet.xml'?无论如何,你的'DispatcherServlet'应该加载'mvc-servlet.xml'(或wtv),并且'ContextLoaderListener'应该加载应用程序上下文。 – 2014-10-11 17:53:03

相关问题