sourcetip

봄에 Bean Post Processor와 init/destroy 방법의 차이점은 무엇입니까?

fileupload 2023. 10. 10. 20:54
반응형

봄에 Bean Post Processor와 init/destroy 방법의 차이점은 무엇입니까?

입니까를 하는 것과 입니까?BeanPostProcessor다 중 할 수 있습니다.init/destroy을 Spring때 XML합니다를 합니다.InitializingBean/DisposableBean인터페이스?

이는 컨테이너 확장 지점에 대한 스프링 문서에서 꽤 명확하게 설명되어 있습니다.

BeanPostProcessor 인터페이스는 사용자 고유의 인스턴스화 로직, 종속성 해결 로직 등을 제공(또는 컨테이너의 기본값을 재정의)하기 위해 구현할 수 있는 콜백 메서드를 정의합니다.Spring 컨테이너가 빈 인스턴스화, 구성 및 초기화를 마친 후 사용자 지정 로직을 구현하려면 하나 이상의 BeanPostProcessor 구현을 연결할 수 있습니다.

postProcessBeforeInitializationBeanPost 된 내용은 알 수 있듯이)되며, 로 BeanPost Processor에이)됩니다도 이에 해당합니다. 그리고 마찬가지로.postProcessAfterInitialization콩을 초기화한 후에 호출됩니다.

에 .@PostConstruct,InitializingBean 정의dinit방법은 이것들이 콩 자체에 정의되는 것입니다.해당 순서는 스프링 설명서의 라이프사이클 메커니즘 결합 섹션에서 확인할 수 있습니다.

따라서 기본적으로 Bean Post Processor는 여러 콩에 대해 사용자 지정 인스턴스화 로직을 수행하는 데 사용될 수 있지만 나머지는 콩 단위로 정의됩니다.

위의 답변들은 매우 중요한 측면의 일부를 명확하게 설명합니다.

그 외에도 콩 포스트 프로세서와 초기화 및 파괴 방법 모두 스프링 콩 수명 주기의 일부라는 것을 이해하는 것도 중요합니다.

BeanPostProcessor 클래스에는 두 가지 메서드가 있습니다.

1) postProcessBeforeInitialization - 이름에 따라 원격 소스/서비스에서 특정 속성 파일/읽기 데이터를 로드하는 등 초기화 전에 필요한 작업을 수행하도록 하는 데 사용됩니다.

2) 후프로세스초기화 후 - 초기화 후에 응용프로그램에 참조가 되기 전에 수행하려는 작업이 제공됩니다.

라이프 사이클에서 의문이 제기된 방법의 순서는 다음과 같습니다.

1) 빈 포스트 프로세서.postProcess Before Initialization()

2) 그 안에

3) 빈 포스트 프로세서.후프로세스초기화 후()

4) 파괴하다, 멸하다, 멸하다, 멸하다, 멸하다, 멸하다

sysout으로 간단한 예제를 작성하여 이를 확인하고 순서를 확인할 수 있습니다.

Init Destroy 콜백 방법은 Spring bean 라이프 사이클 단계의 일부입니다.init 메서드는 인스턴스화 후 실행됩니다.마찬가지로, 파괴 방법은 최종화되기 전에 실행됩니다.

는 으로써 이 할 수 .InitializingBean그리고.DisposableBean 주석 , @postconstruct그리고.@predestroy 합니다를 합니다.<bean>와 함께init-method그리고.destroy-method특성.

BeanPostProcessor 인터페이스는 스프링 컨테이너에서 수행하는 구성 사전 및 사후 초기화를 수행하려는 경우 프레임워크의 기능을 확장하기 위해 사용됩니다.

를 들어, 기본적으로 Spring은 다음을 인식하지 못합니다.@PostConstruct그리고.@PreDestroy주석.그걸 가능하게 하기 위해서는, 우리는 등록을 해야 합니다.CommonAnnotationBeanPostProcessor합니다.<context:annotation-config />설정 파일에 저장됩니다.여기서CommonAnnotationBeanPostProcessor미리 정의되어 있습니다.BeanPostProcessor주석에 대한 구현좋아요:

@필수 활성화RequiredAnnotationBeanPostProcessor
@자동 배선 사용AutowiredAnnotationBeanPostProcessor

그리고 또 하나의 주요 차이점은 PropertiesSet() & destory() 메서드가 매개 변수를 전혀 허용하지 않고 반환 유형도 무효이므로 사용자 지정 로직을 구현하지 않았습니다.그러나 Bean PostProcess 메서드에 도달하면 초기화 전 프로세스(Object bean, String beanName) 및 사후 프로세스가 수행됩니다.초기화 후(Object bean, String beanName) 이 두 매개 변수를 허용하고 반환 유형도 Object(개체)이므로 초기화 로직은 물론 전달되는 bean을 기반으로 사용자 지정 로그인을 작성할 수 있습니다.

이 두 가지 콜백 메소드 특징은 모두 빈 라이프 사이클을 포함하며 다음과 같은 라이프 사이클입니다.

1) 빈 포스트 프로세서.post Process Before Initilization()

Bean) @postConstruct Initializing Bean.After PropertiesSet() )
xml /*에서 정의합니다. 또한 세 가지 방법을 사용할 수 있는 경우 동일한 orr을 따릅니다. **/

3) 빈 포스트 프로세서.후프로세스초기화 후()

4) @preDestroy 또는 DisposibleBean.destroy() 또는 destroy 메서드는 xml /*에 정의되어 있습니다. 또한 세 가지 방법이 사용 가능한 경우에도 동일한 ordr을 따릅니다. **/

위의 모든 답변에 대한 간단한 보충 자료입니다.일반적인 논리가 있다면, 여러분의 콩에 로거를 주입하는 것, 속성 파일 설정, 반사를 통해 콩의 밭에 기본값을 설정하는 것과 같이 여러분의 모든 봄 콩에 보편적으로 적용되어야 하는 공통적인 논리를 가지고 있다면, 여러분은 그 논리를 한 곳에 넣을 수 있습니다:@Overriden 콜백(예:postProcessBeforeInitialization(Object arg0, String arg1)만약 당신이 실행하고 있다면,BeanPostProcessorinterface); 모든 콩에 동일한 논리를 복제하는 대신.

a)빈을 초기화하기 전에 postProcessBeforeInitialization()이 호출됩니다.

b)빈이 초기화되면 Spring 문서에 따라 다른 콜백 메소드가 다음 순서로 호출됩니다.

  1. @PostConstruct로 주석이 달린 메소드
  2. 빈 콜백 인터페이스 초기화에 의해 정의된 대로 afterPropertiesSet()
  3. XML을 통해 정의된 init 메서드입니다.

주요 차이점은 postProcessBeforeInitialization() 방법으로 초기화가 완료된 후 위 3가지 방법이 호출된다는 것입니다.

이 메소드들이 완료되면 메소드 postProcessInitialization() 후에는 다음과 같은 순서로 파괴 메서드가 호출됩니다.

  1. @PreDestroy 주석이 달린 메서드

  2. destroy()는 일회용 빈 콜백 인터페이스에 의해 정의된 것입니다.

  3. XML을 통해 정의된 destroy() 메서드입니다.

언급URL : https://stackoverflow.com/questions/9862127/what-is-the-difference-between-beanpostprocessor-and-init-destroy-method-in-spri

반응형