작성
·
137
·
수정됨
0
1.빈 생명주기 콜백 시작 9분에서 아래와 같은 3개 단어가 나오는데요.
ConfigurableApplicationContext가 최상위 인터페이스고
ApplicationContext
AnnotationConfigApplicationContext
이런 순으로 자식관계가 형성되어있는건가요?
빈 생명주기 콜백 시작 13분에서 스프링빈은 객체 생성후 의존관계주입이 되는데 생성자는 예외라고 하셨는데요. 생성자가 스프링빈을 이미 생성해서 스프링 빈이 같이 들어와야 되기 때문에 파라미터의 예외라고 하셨는데요. 혹시 코드로 예시좀 보여주실 수 있나요?
3.
인터페이스 InitializingBean, DisposableBean 3분에서 위와 같은 코드가 나오는데요. 위코드가 의존관계 주입이라는건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. ekek님 질문에 답변 드리겠습니다.
네, 말씀하신 인터페이스는 스프링에서 제공하는 컨테이너 관련 인터페이스입니다. ConfigurableApplicationContext
는 ApplicationContext
의 자식 인터페이스이며, AnnotationConfigApplicationContext
는 ApplicationContext
를 구현한 클래스로, 정확히 말씀하신 순서대로 상속 및 구현 관계가 형성되어 있습니다.
스프링 컨테이너에서 빈을 생성할 때, 생성자를 통한 의존관계 주입이 예외적인 경우를 말씀하신 것 같습니다. 생성자 주입의 경우, 스프링 빈 객체를 생성함과 동시에 의존 관계를 주입하기 때문에, 생성자 주입은 스프링 빈의 생명주기 과정 중 객체 생성 단계에 해당합니다. 다음은 생성자 주입 예시 코드입니다:
@Component
public class MyService {
private final DependencyBean dependencyBean;
@Autowired
public MyService(DependencyBean dependencyBean) {
this.dependencyBean = dependencyBean;
}
}
위 코드에서 MyService
빈이 생성될 때, 스프링은 DependencyBean
타입의 빈을 찾아 생성자로 전달하며 MyService
빈을 생성합니다. 이렇게 생성자 파라미터를 통해 의존성을 주입받고 있습니다.
InitializingBean
인터페이스의 afterPropertiesSet
메서드를 구현한 것으로, 의존관계 주입이 완료된 후 (즉, 스프링 빈의 속성 설정이 끝난 후) 실행되는 초기화 코드입니다. 직접적으로 의존관계를 주입하는 코드는 아니며, 의존관계가 주입되고 나서 필요한 초기화 작업을 진행하는 콜백 메서드입니다.코드에서 connect
와 call
메서드는 afterPropertiesSet
이 호출되었을 때 네트워크 연결을 설정하고 초기화 메시지를 보내는 로직을 처리하는 것으로 보입니다. 이런 초기화 메서드는 주입 받은 의존성을 사용하여 추가적인 설정을 하거나, 네트워크 연결처럼 무거운 초기화 작업을 수행할 때 사용됩니다.