본문 바로가기
error/Backend

Org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberController': Unsatisfied dependency expressed through field 'service'; nested

by 이쟝 2022. 3. 17.

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberController'

: Unsatisfied dependency expressed through field 'service'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl': Unsatisfied dependency expressed through field 'dao'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.mycampus.myappy.dao.MemberDAO' available

: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.inject.Inject()}

 

문제 상황

대부분 Serivce나 Controller에 @애너테이션이 안붙어서 오류가 났다고 하지만 나는 아니었다...web.xml에도 라이브러리 다 받고 환경설정까지 했는데 뭐가 문제였던건지...

 

해결

1. servlet-context.xml 에 마지막 <context:component-scan base-package="패키지명" /> 현재 작업중인 프로젝트의 패키지명.. 컨트롤러가 포함된 패키지의 위치를 정확하게 기재 하기. (그냥 컨트롤러에 패키지를 그대로 복사해서 넣으시는 추천)

-> 물론 나는 안됐다. 

 

2. root-context-xml 에 마지막 <mybatis-spring:scan base-package="dao 패키지명"/>을 적어야 한다. 

<?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 https://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
	<!-- Mysql DB 정보 설정 namespaces탭에서 mybatis-spring 체크-->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
		<property name="url" value="jdbc:mysql://127.0.0.1/multicampus"></property>
		<property name="username" value="root"></property>
		<property name="password" value="root1106"></property>
	</bean>
	
	<!-- mybatis에서 사용할 xml 파일의 위치를 이용해 SqlSessionFactory 객체를 생성 = dataSource객체를 DI -->
	<bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
		<property name="mapperLocations" value="classpath:/mapper/*Mapper.xml"></property>
		<!--앞에 무엇을 붙이든 맨 뒤에 Mapper.xml을 붙이겠다!! 마지막은 편의를 위해서 생성함-->
	</bean>
	
	<mybatis-spring:scan base-package="com.mycampus.myappy.dao"/>
</beans>

결국에는 DAO에서 빈을 생성하지 못한다는 소리였는데 저 dao 경로 설정을 안해줘서 난 오류였다...