2016-06-02 2 views
0

web.xml을자동으로 묶어 스프링 MVC를 작동하지

 <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
     </listener> 
     <servlet> 
     <servlet-name>spring-mvc</servlet-name> 
     <servlet-class> 
       org.springframework.web.servlet.DispatcherServlet 
      </servlet-class> 
     <load-on-startup>1</load-on-startup> 
     </servlet> 

내 스프링 MVC-servlet.xml에

 <context:component-scan base-package="org.app.controller" /> 
     <mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" /> 
     <mvc:annotation-driven /> 
     <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> 

내 컨트롤러 : 그냥 그림

 @Controller 
    public class HomeController { 
     LoginService loginService; 
     @RequestMapping(value = "/", method = RequestMethod.GET) 
     public String login(Model model) { 
      loginService.checkLoginDetails(new LoginDetails("Svn", 1)); 
      return "login"; 
     } 

AppplicationContext.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" xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-4.0.xsd"> 
<!-- <context:annotation-config /> --> 
    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 
     <property name="url" value="jdbc:mysql://localhost:3306/test"></property> 
     <property name="username" value="root"></property> 
     <property name="password" value=""></property> 
    </bean> 
    <bean class="org.app.controller.HomeController" autowire="byName"></bean> 
    <bean id="loginDAO" class="org.app.DAOImpl.LoginDAOImpl" autowire="byName"></bean> 
    <bean id="loginService" class="org.app.DAOServiceImpl.LoginServiceImpl" autowire="byName"></bean> 
    <bean id="employeeDAO" class="org.app.DAOImpl.EmployeeDAOImpl" autowire="byName"></bean> 
    <bean id="employeeService" class="org.app.DAOServiceImpl.EmployeeDAOServiceImpl" autowire="byName"></bean> 
    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"></property> 
     <property name="annotatedClasses"> 
      <list> 
       <value>org.app.entity.Employee</value> 
       <value>org.app.entity.LoginDetails</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.hbm2ddl.auto">create</prop> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 
    </bean> 
    <!-- <context:component-scan base-package="org.infy"> <context:exclude-filter 
     expression="org.springframework.stereotype.Controller" type="annotation" 
     /> </context:component-scan> --> 
    <tx:annotation-driven /> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 
</beans> 

LoginServiceImpl

public class LoginServiceImpl implements LoginService{ 

    LoginDAO loginDAO; 
    @Override 
    @Transactional 
    public boolean checkLoginDetails(LoginDetails loginDetails) { 
     return loginDAO.checkLoginDetails(loginDetails); 
    } 

} 

문제 : 내 LoginDAO은 null입니다. 스프링은 주석없이 완료 될 때 자동 와이어 링을 사용하여 오브젝트를 인스턴스화 할 수 없지만, ApplicationContext.xml의 주석과 함께 사용할 때 제대로 작동합니다.

내 LoginService bean이 디스패처 서블릿 컨텍스트의 구성 요소 검사에 의해 인스턴스화되고 있습니다. 이제 LoginServiceImpl을 인스턴스화 할 때 다른 Bean 정의에 대한 RootApplication 컨텍스트를 조사해야하지만 그렇지 않다. @autowire를 구성 요소 검사와 함께 사용하거나 구성 요소 검사를 사용할 때 왜 이런 일이 발생하는지 이해할 수 없습니다. 어노테이션이 없으면 잘 작동합니다.

나는 또한 내가 무엇을하려고하는지 잘 모르겠습니다. 나는 Spring MVC로 놀고 있었고 이것에 붙어 있었다. AppplicationContext.xml에서

답변

0

내부 요소로 당신의 bean을위한 주입 종속성을 지정해야합니다.

<bean class="org.app.controller.HomeController" autowire="byName"> 
    <property name="loginService" ref="loginService"> </property> 
</bean> 
<bean id="employeeService" class="org.app.DAOServiceImpl.EmployeeDAOServiceImpl" autowire="byName"> 
    <property name="employeeDAO" ref="employeeDAO"> </property> 
</bean> 

주석을 사용하는 것이 좋습니다.

+0

예, @ erolkaya84. 이 방법은 주석을 사용하여 작동합니다. 그러나 주석이 없으면 왜 작동하지 않는지 알고 싶습니다. – Kid101

+0

loginServiceImpl 아래에서 loginDao를 속성으로 정의 했습니까? 그렇지 않다면 loginDao에 @Autowire로 태그를 지정해야합니다. – erolkaya84

+0

방금 ​​옛날 학교라고 부르 자고. 나는 주석을 사용하고 그것을 XML 방식으로하고 싶지 않다. @Autowire 선생님과 함께 작동합니다. – Kid101

0

당신은

<bean id="loginService" class="org.app.DAOServiceImpl.LoginServiceImpl" autowire="byName"> 
    <property name="loginDAO" ref="loginDAO"> </property> 
</bean> 

같은 일뿐만 아니라 EmployeeService 및 컨트롤러에 간다 당신의 ApplicationContext.xml를 업데이트하십시오

+0

@stan을 어떻게 추천합니까? 작은 예가 확실히 도움이 될 것입니다. – Kid101

+0

주석을 사용하는 것이 좋습니다 :) 이러한 XML 정의를 모두 제거하고 Service and Repository 주석을 사용하여 빈에 주석을 달고 Autowire – Stan

+0

을 사용하면됩니다. 분명히 주석을 사용할 것입니다. 스프링과 스프링 MVC의 학습 단계에 있기 때문입니다. 나는 당신이나 다른 누군가가 내 실수에 관해 말해 줄 수 있다면 고맙겠습니다. – Kid101