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에서
예, @ erolkaya84. 이 방법은 주석을 사용하여 작동합니다. 그러나 주석이 없으면 왜 작동하지 않는지 알고 싶습니다. – Kid101
loginServiceImpl 아래에서 loginDao를 속성으로 정의 했습니까? 그렇지 않다면 loginDao에 @Autowire로 태그를 지정해야합니다. – erolkaya84
방금 옛날 학교라고 부르 자고. 나는 주석을 사용하고 그것을 XML 방식으로하고 싶지 않다. @Autowire 선생님과 함께 작동합니다. – Kid101