레거시모음/오류해결

[Spring Boot][오류해결] org.springframework.beans.factory.UnsatisfiedDependencyException

gakko 2022. 2. 12. 13:00
org.springframework.beans.factory.UnsatisfiedDependencyException

 

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException

 

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException

스프링부트를 사용하다가 위와 같은 에러가 발생하는 경우가 있다.

특정 인터페이스를 상속한 클래스 파일이 여러 개일 때

의존성 주입을 위해 @Qualifier 어노테이션을 사용하게 되는데, 이 때 실수를 하면 발생하는 에러다.

 

 

아래와 같은 DAO 파일과  Service 파일 있다고 해보자.

(전제 >>> DAO 인터페이스를 상속한 파일이 여러 개이다.)

 

- DAO 파일

@Repository
public class EmployeeDAOJpaImpl implements EmployeeDAO {

	private EntityManager entityManager;
	
	@Autowired	
	public EmployeeDAOJpaImpl(EntityManager entityManager) {
		this.entityManager = entityManager;
	}
	
	@Override
	public List<Employee> findAll() {
		
		// create a query
		Query query =
				entityManager.createQuery("from Employee");
		
		// execute query and get result list
		List<Employee> employees = query.getResultList();
		
		// return the results
		return employees;

	}
    
    ...
}

 

 

 

문제상황

- Service 파일

@Service
public class EmployeeServiceImpl implements EmployeeService {

	private EmployeeDAO employeeDAO;
	
	@Autowired
	public EmployeeServiceImpl(@Qualifier("EmployeeDAOJpaImpl") EmployeeDAO employeeDAO) {
		this.employeeDAO = employeeDAO;
	}
    
    ...
    
}

 

위 코드에서 무엇이 문제일까?

분명히 @Qualifier 어노테이션에 똑같이 클래스명을 복사붙여넣기해도 해결이 안 된다.

똑같이 복사 붙여넣기한 것이 문제다.

 

 

문제의 코드

public EmployeeServiceImpl(@Qualifier("EmployeeDAOJpaImpl") EmployeeDAO employeeDAO)

 

 

해결방법

public EmployeeServiceImpl(@Qualifier("employeeDAOJpaImpl") EmployeeDAO employeeDAO)

@Qualifier 어노테이션에 클래스명을 적을 때 맨 앞 글자를 소문자로 적어줘야한다.

"EmployeeDAOJpaImpl" 가 아닌 "employeeDAOJpaImpl"으로 수정하면 된다.