TEST 진행 중 아래와 같은 this.em NullPointException 오류발견

java.lang.NullPointerException: Cannot invoke "jakarta.persistence.EntityManager.createQuery(String, java.lang.Class)" because "this.em" is null

	at jpabook.jpashop2.repository.MemberRepository.findByName(MemberRepository.java:31)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

 

 

 

@Autowired를 사용하지 않고 

@RequiredArgsConstructor 로 변경하면서  final 을 붙이지 않아 오류 발생

 

 

@RequiredArgsConstructor 이란?

final 키워드를 사용한 인스턴스만  Bean 객체로 등록한다

final 키워드를 사용하지 않았을 경우 NullPointException 오류 발생

 

 

@Autowired 사용하지 않고 @RequiredArgsConstructor 변경이유 :

 

@Autowired  어노테이션과 생성자를 사용하여 의존성 주입 3가지 방법

1)필드 주입

2) setter 주입

3)생성자 주입

 

스프링이 공식적으로 추천하는 방법은 생성자 주입이다. 한번 의존성을 주입받은 객체는 프로그램이 끝날때까지 변하지 않는 특징을 가지므로 [불변성]을 표시해주는 것이 좋기 때문이다

 

그래서 의존성을 주입할 객체는 final 키워드를 사용하는 것

 

 

 

 

+ Recent posts