@Bean 설정 정보를 통한 빈 생명주기 콜백 등록 질문드립니다
@Configuration
public class LifeCycleConfig {
@Bean(initMethod = "init", destroyMethod = "close")
public NetworkClient networkClient() {
NetworkClient networkClient = new NetworkClient();
...
}
}위와 같이 @Bean에 initMethod와 destroyMethod를 명시하여 빈 생명주기 콜백을 등록하는 방식에서, 중요한 장점으로 코드를 고칠 수 없는 외부 라이브러리에도 초기화, 종료 메서드를 적용할 수 있다는 점을 꼽아주셨습니다.
그런데 혹시 그게 어떻게 가능한가요?
명시한 initMethod와 destroyMethod를 반환되는 빈 객체 내부 메소드에서 찾는 것 같은데, 그러면 그 외부 라이브러리 클래스 내부에 메서드를 작성해서 해당 메서드 명을 명시해주어야 할 필요가 있지 않은가요?
아니면 혹시 해당 외부 라이브러리 클래스를 상속 받는 별도의 클래스를 작성한 뒤, 해당 클래스에 init, close 메소드를 구현한 뒤, 그 클래스를 빈으로 등록하는 방식일까요? 아니라면 어떤 식으로 등록할 수 있나요?
만약 상속해서 구현하는 방식이라면, InitializingBean, DisposableBean 인터페이스를 구현하는 방식도, 외부 라이브러리 클래스를 상속 받는 클래스를 작성한 뒤, 해당 클래스가 InitializingBean, DisposableBean을 구현하게끔 하고 그 클래스를 빈으로 등록하면 안되나요? (@PostConstruct와 @PreDestory로 등록하는 방식도 마찬가지로 외부 라이브러리 클래스를 상속 받은 뒤 구현할 수 없는 건가요?) 이러한 경우 어떠한 문제가 발생하나요?
직접 코드를 수정할 수 없는 외부 라이브러리에 빈 생명주기 콜백을 등록할 수 있는지 여부로 장단점이 나뉘었는데, 상속해서 등록하는 방식이라면 모두 다 가능하지 않은가 싶어서 질문 드리게 되었습니다. 잘못 이해한 부분이 있다면 알려주시면 감사드리겠습니다.
관련 강의
'섹션 8. 빈 생명주기 콜백' - 빈 등록 초기화, 소멸 메서드
답변 1
0
안녕하세요. 강호찬님
여기서 예시는 상속도 하지 못하는 상황을 떠올려보시면 됩니다. 상속을 하게 되면 코드를 직접 수정할 수 있으니 수 많은 대안이 있겠지요?
예를 들어서 외부 라이브러리를 사용하는데, 상속을 하지 못하게 막혀있습니다. (물론 상속을 할 수 있는 상황도 사용할 수 있습니다) 외부 라이브러리의 클래스가 초기화와 종료 메서드의 기능을 모두 제공하는 상태이고, 이것을 애플리케이션 시작 단계에서 초기화를 호출하고, 종료 단계에서 종료 메서드를 꼭 호출해주어야 하는 상황일 수 있습니다.
이럴 때 사용하면 됩니다.
감사합니다.
0
안녕하세요 김영한 선생님.
말씀하신대로 외부 라이브러리 클래스가 초기화와 종료 메서드의 기능을 이미 제공하는 상태인 경우, @Bean에 이를 등록하기만 하면 되니 왜 장점인지 이해가 갑니다.
감사합니다.
코드 자료
0
15
2
구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?
0
49
2
MemberService의 인터페이스를 왜 사용하는지 궁금합니다.
0
72
1
롬복 @Setter를 써야 하는 상황이 있는건가요?
0
87
1
빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?
0
79
1
테스트 속도가 나중에 영향이 있을까요?
0
75
1
gradle 설정 안떠서 질문 남깁니다!
0
117
2
build.gradle로 프로젝트를 여는 이유
0
82
1
provider 사용하는 이유
0
85
1
다음 강의 뭘 들어야 할까요
0
123
2
프로토타입 빈, 직접 destroy 호출 안 할 경우
0
62
1
beanB
0
79
2
퀴즈다시풀기
0
63
1
Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ
0
90
2
"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.
0
63
3
run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>
0
102
2
도메인의 정의?
0
57
1
ApplicationContext 질문입니다.
0
60
1
@Scope의 proxyMode를 사용할때 단위 테스트 방법
0
86
2
ai api 선정하기 관련 질문
0
116
2
생성자 자동주입 관련해서
0
62
1
생성자 직접 호출 vs 팩토리 메서드 패턴
0
93
2
Spring에서 SessionScope와 RequestScope는 함께 사용되나요?
1
63
1
12:25
0
75
2





