[컴][웹] spring boot 에서 Constructor Dependency Injection(CDI)

autowired 가 없이 자동으로 / argument 에 parameter 에 autowired 가 없는 경우

spring boot 에서 Constructor Dependency Injection(CDI)

대체로 ref. 3 에서 잘 정리된 듯 하다. 여기서는 constructor 에 @Autowired 가 없는 경우, 그리고 argument 가 어디에서도 명시적으로(explicitly) instantiated 가 안되는 경우에 대해 어떻게 동작하는지를 이야기하려 한다.

constructor 에 @Autowired 가 없는 경우

CDI(Constructor Dependency Injection) 을 사용하는 것은 특별한 것이 아니다. 이것을 사용하면, 일반적으로 우리가 java 를 사용하듯이 constructor 의 argument 들은 instantiated 되고나서 넘어오게 된다.

여기서 constructor argument들 에 대한 intantiation 을 @Configuration 에서 해놓으면 된다.[ref. 1], ref.1 에서 code를 확인할 수 있다.

argument 에 대한 instantiate 은 어디서 하는가?

그러나 java - How do constructor calls with @Autowired work? - Stack Overflow 를 보면, 만약 argument 에 대해서 어디선가 instantiate 를 해놓지 않았다고 하더라도, 자동으로 해주게 된다.

참고로, spring 4.3.x 부터는 constructor 가 1개라면, @Autowired 를 생략해도 된다.[ref. 2]

그래서 다음과 같은 class 에서 MyTestService 는 자동으로 instantiate 가 된다고 보면 될 듯 하다.

public class MyTestClass {

    private MyTestService service;

    public MyTestClass(MyTestService service) {
        this.service = service;
    }

}

References

  1. Constructor Dependency Injection in Spring | Baeldung
  2. @Autowired | Spring Framework Reference Documentation 4.3.x
  3. java - How do constructor calls with @Autowired work? - Stack Overflow

댓글 없음:

댓글 쓰기