작성
·
273
0
JpaMemberRepositotry 실행할 때
SpringConfig.class파일에서 EntityManager em 변수랑 새로운 생성자를 만드는데
왜 이전에 만들어 둔 DataSource를 매개변수로 가진 생성자를 지우지 않고 그대로 두면 오류가 뜨는건지 궁금합니다.
답변 1
1
정답부터 말씀드리면 변수가 초기화 되지 않고 사용되기 때문입니다.
SpringConfig 클래스가 인스턴스로 생성된 후 스프링에 등록(?) 되어 사용되게 됩니다.
생성자는 말그대로 클래스를 인스턴스로 만들기 위한 방법을 명시해요.(이해가 안된다면 자바 문법을 더 공부해 보세요 :)
그런데 SpringConfig 클래스의 생성자가 두 가지 방법이 있는겁니다.
1.dataSource, em을 모두 Autowired 해서 생성하는 방법
2. dataSource만 Autowired 해서 사용하는 방법
2번 방법을 사용해도 SpringConfig 클래스의 인스턴스를 만들 수가 있게 되겠죠.
하지만 2번 방법을 사용하게 되면 내부적으로 em이 필요한데 생성자 주입(Autowired)를 통해 의존성을 주입 받지 못하게 됩니다.(쉽게 말하면.. 객체 생성할 때 new 클래스 이름( ); 이렇게 생성하는 것을 Autowired를 통해 주입 받는 것입니다.)
그렇게 되면 SpringConfig 는 정상적으로 동작하지 못하기 때문에 em을 초기화 하라고 에러가 발생하는 것입니다.