Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- tibero
- NCP
- gradle
- Windows
- IntelliJ
- kubectl
- Git
- log4j2
- nginx
- react
- database
- Kubernetes
- jetbrains
- LOG4J
- MySQL
- gson
- springboot
- mybatis
- BPMN
- VSCode
- nodejs
- dbeaver
- useEffect
- JPA
- JavaScript
- docker
- intellijIDEA
- Spring
- wildfly
- Java
Archives
- Today
- Total
두 손끝의 창조자
Namespace에서 JpaRepository 참조가 안된다! 본문
어떤 클래스가 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