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 경로 설정을 안해줘서 난 오류였다...