JAVA/spring
Spring 의존성 주입 error
kiwiiiv
2022. 1. 17. 22:54
Repository nullpointerException
@Autowired
private UserRepository userRepository;
@Autowired
private HttpSession httpSession;
처음에는 위와 같이 autowrired annotation을 이용하여 필드를 주입하려 했으나...
테스트에서 계속 null 에러가 떴다..
entitymanager에서도 에러 뜨고 하여간 에러 창을 너무 많이 봐서 헷갈린다
쨌든 검색해 보니 필드 주입(위와 같은 방식) 은 권장되는 방식이 아니며..
(불변성 위배, 단일 책임의 원칙 위반 등..)
생성자 주입 방식이 권장되는 방법이라고 한다.
(+ 한 번 설정된 Service나 Repository에 대해 어플리케이션 실행 후 변경되지 않을 수 있다.)
따라서 아래와 같이
@RequiredArgsConstructor 어노테이션(final 필드에 대하여 생성자 주입)
final 선언을 이용하여 생성자 주입 방식으로 변경하였다.
@Service
@Transactional
@Slf4j
@RequiredArgsConstructor
public class CustomService {
private final UserRepository userRepository;
private final HttpSession httpSession;
...
@RequiredArgsConstructor 어노테이션을 이용하지 않을 때
@Service
@Transactional
@Slf4j
public class CustomService {
private UserRepository userRepository;
private HttpSession httpSession;
@Autowired
public CustomService(UserRepository userRepository, HttpSession httpSession){
...
필드 주입 방식의 단점과 의존성 주입에 대하여
[Spring] 필드주입 -> 생성자 주입방식으로 변경 (velog.io)
[Spring] 필드주입 -> 생성자 주입방식으로 변경
일단, 의존성 주입의 종류로는 Constructor, Setter, Field 타입이 있다.Constructor(생성자)SetterField필드 인젝션 방식을 보통 많이 사용하는데 필드 인젝션은 아래와 같은 단점들이 있다.1\. 단일 책임의 원
velog.io