두 손끝의 창조자

Namespace에서 JpaRepository 참조가 안된다! 본문

JPA

Namespace에서 JpaRepository 참조가 안된다!

codinglog 2020. 7. 31. 11:49

어떤 클래스가 JpaRepository를 참조하기 위해서 @Autowired나 생성자, 속성으로 할 수 있다.

Namespace로 빈을 선언할 때 생성자로 참조하기 위해서 JpaRepository를 넣어주면 참조하기 못하는 현상을 발견했다. 이걸 그냥 Autowired로 바꾸면 잘 되는데....

아무래도 생성자 방식으로 했을 때 JpaRepository가 아직 Bean으로 만들어지지 않은 상황에서 생성자가 실행되어서 그렇지 싶다.

이걸 어떻게 극복을 하는지 모르겠다.


해결

Autowired로 인해서 잘 초기화된 것이 아니었다. 그냥 null로 바인드 되어서 잘 된 것처럼 보일 뿐... 이것만 봐도 그냥 Autowired를 쓰는 것보다는 생성자로 명시적으로 받는 것이 오류를 미리 발견할 수 있다.

참조하지 못하는 이유는 Context 계층구조 때문이었다.

예전에도 이와 비슷한 일로 삽질을 했었는데 또 반복했다. root-context는 web.xml에 정의한 ContextLoaderListener 설정에 의한다. contextConfigLocation 속성 값에 있는 정보로 root Context초기화하는데 security관련 빈들은 root context에 있어야 한다.

그런데 component scan tag가 dispatcher-servlet.xml에 들어가 있어서 필요한 빈들을 다 가져오지 못했기 때문에 발생한 문제이다. 

반응형
Comments