오류해결

마이바티스 인터페이스 찾지 못하는 에러

indeep 2023. 5. 8. 22:05

Error creating bean with name 'movieController': Unsatisfied dependency expressed through method 'setMovieDao' parameter 0;

 

이런 코드가 발생했었다.

 

분명 마이바티스의 <mybatis-spring:scan base-package="com.ssafy.ws.model.dao"/> 이라는 코드를 이용해서 dao경로에 있는 모든 인터페이스를 자동으로 빈으로 등록했지만 서버를 실행하면 계속 없다고만 떴다.

 

@Autowired
	ResourceLoader resLoader;

	private MovieDao moviedao;
	private List<Movie> list;
	
	@Autowired
	public void setMovieDao(MovieDao moviedao) {
		this.moviedao = moviedao;
	}

. 이렇게 컨트롤러에 인터페이스를 빈으로 등록해놨으니 설정자 주입을 해줬으나 계속 MovieDao타입이 없다고 에러를 발생.

 

해결 방법

Test.java로 직접 빈을 불러와서 사용할때는 applicationContext.xml에 등록해서 했지만 웹에서 실행하려면

root-context.xml에 등록을 해줘야 한다.

 

 

다시 살펴보니 나는 root-context.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:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="dataSource"
		class="org.apache.commons.dbcp2.BasicDataSource">
		<property name="driverClassName"
			value="com.mysql.cj.jdbc.Driver"></property>
		<property name="url"
			value="jdbc:mysql://localhost:3306/ssafydb?serverTimezone=UTC"></property>
		<property name="username" value="ssafy"></property>
		<property name="password" value="ssafy"></property>
	</bean>

	<!-- MyBatis를 사용하기 위한 sqlSessionFactory를 등록한다. -->
	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- mapper xml 파일의 경로를 ant 표현식의 형태로 사용한다. -->
		<property name="mapperLocations"
			value="classpath*:mappers/**/*.xml" />
		<!-- mapper에서 사용할 DTO들의 기본 패키지를 등록한다. -->
		<property name="typeAliasesPackage" value="com.ssafy.ws.model.dto"></property>
	</bean>

	<!-- mybatis에서 제공하는 scan 태그를 통해 repository interface들의 위치를 지정한다. -->
	<mybatis-spring:scan base-package="com.ssafy.ws.model.dao"/>
</beans>

applicationContext.xml 안에만 이렇게 빈으로 등록이 돼 있었다.

그래서 웹에서는 찾지 못한다고 계속 오류를 반환했던 것.

 

test.java를 사용하면 applicationContext를 사용해서 스프링 컨테이너를 만들지만 웹으로 사용하면 root-context.xml을 사용해서 스프링 컨테이너를 만든다.

반응형