programing

빈 초기화 완료 후 메서드 호출 방법

easyjava 2023. 3. 10. 22:52
반응형

빈 초기화 완료 후 메서드 호출 방법

Application Context 로드 시 빈에 있는 (비정적) 메서드를 한 번만 호출해야 하는 사용 사례가 있습니다.Method를 사용해도 될까요?이것에 대해 FactoryBean을 호출하고 있습니까?아니면 더 나은 해결책이 있을까요?

참고로 Config Context Loader Listener를 사용하여 웹 응용 프로그램에서 응용 프로그램콘텍스트를 로드합니다.또한 빈 A가 인스턴스화되면 메서드 A()를 한 번만 호출하면 됩니다.

어떻게 하면 잘할 수 있을까요?

를 확장하려면@PostConstruct제 생각에는 이게 정말 최선의 해결책입니다.

  • Spring API에서 코드를 분리한 상태로 유지합니다.@PostConstructjavax.*)
  • 이것은 빈을 초기화하기 위해 호출해야 하는 것으로서 당신의 init 메서드에 주석을 붙입니다.
  • spring bean 정의에 init-method Atribut을 추가할 필요가 없습니다.스프링에서는 자동으로 메서드가 호출됩니다(어쨌든 컨텍스트 내의 다른 곳에 annotation-config 옵션을 등록하고 있다고 가정합니다).

다음과 같은 것을 사용할 수 있습니다.

<beans>
    <bean id="myBean" class="..." init-method="init"/>
</beans>

이렇게 하면 콩이 인스턴스화되면 "init" 메서드가 호출됩니다.

참고 자료에서 설명한 바와 같이 고려해야 할 세 가지 접근법이 있습니다.

init-method 애트리뷰트 사용

장점:

  • 인터페이스를 실장하기 위해서 bean은 필요 없습니다.

단점:

  • bean이 올바르게 설정되어 있는지 확인하기 위해 구축 후 이 방법이 필요하다는 것은 소스 코드에 즉시 표시되지 않습니다.

Initializing Bean 구현

장점:

  • init-method를 지정하거나 구성 요소 스캔/주석 처리를 켤 필요가 없습니다.
  • 라이브러리와 함께 제공되는 콩에 적합합니다.이 라이브러리를 사용하는 애플리케이션이 콩의 라이프 사이클에 관여하지 않도록 합니다.

단점:

  • init-method 접근법보다 더 침습적입니다.

JSR-250 @PostConstruct 라이프 사이클 주석 사용

장점:

  • 컴포넌트 스캔을 사용하여 콩을 자동 검출할 때 편리합니다.
  • 초기화에 특정 방법을 사용하는 것을 명확히 한다.의도는 코드에 가깝습니다.

단점:

  • 초기화는 더 이상 구성에서 중앙에서 지정되지 않습니다.
  • 주석 처리를 켜야 합니다(가끔 잊어버릴 수 있음).

구현해 보셨습니까?당신이 찾고 있는 것과 정확히 일치해요.

단점은 콩이 스프링을 인식하게 된다는 것입니다만, 대부분의 어플리케이션에서는 그다지 나쁘지 않습니다.

커스텀 Bean Post Processor를 애플리케이션 컨텍스트에 도입할 수 있습니다.또는 Spring 인터페이스를 bean에 실장해도 괜찮다면 InitializingBean 인터페이스 또는 "init-method" 디렉티브(같은 링크)를 사용할 수 있습니다.

두 가지 접근법에 대한 혼동을 추가로 해소하기 위해, 즉

  1. @PostConstruct...
  2. init-method="init"

개인적인 경험으로 (1)사용은 서블릿 컨테이너에서만 가능한 반면 (2)데스크탑 어플리케이션에서도 모든 환경에서 사용할 수 있다는 것을 알게 되었습니다.따라서 스탠드아론 어플리케이션에서 Spring을 사용하는 경우 (2)를 사용하여 "초기화 후 이 메서드를 호출합니다.

언급URL : https://stackoverflow.com/questions/1088550/how-to-call-a-method-after-bean-initialization-is-complete

반응형