복붙노트

[SPRING] Spring의 BeanPostProcessor와 init / destroy 메소드의 차이점은 무엇입니까?

SPRING

Spring의 BeanPostProcessor와 init / destroy 메소드의 차이점은 무엇입니까?

BeanPostProcessor 인터페이스를 구현하는 것과 Spring의 XML 구성 파일에서 init / destroy 메소드 속성을 사용하거나 InitializingBean / DisposableBean 인터페이스를 구현하는 것의 차이점은 무엇입니까?

해결법

  1. ==============================

    1.이것은 Spring 문서에서 Container Extension Points에 대해 아주 명확하게 설명되어 있습니다.

    이것은 Spring 문서에서 Container Extension Points에 대해 아주 명확하게 설명되어 있습니다.

    따라서 본질적으로 BeanPostProcessor에 정의 된 postProcessBeforeInitialization 메소드는 bean 초기화 전에 호출되고 (이름에서 알 수 있듯이) postProcessAfterInitialization은 Bean 초기화 후에 호출됩니다.

    @PostConstruct, InitializingBean 및 사용자 정의 init 메소드와의 차이점은 이들이 bean 자체에 정의되어 있다는 것입니다. 그들의 순서는 스프링 문서의 Combining lifecycle mechanisms 섹션에서 찾을 수 있습니다.

    그래서 기본적으로 BeanPostProcessor는 다른 bean이 Bean별로 정의 된 여러 bean에 대한 사용자 정의 인스턴스 작성 논리를 수행하는 데 사용될 수 있습니다.

  2. ==============================

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

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

    그것과는 별개로 beanPostProcessor와 init 및 destroy 메소드가 스프링 빈 생명주기의 일부라는 것을 이해하는 것도 중요하다.

    BeanPostProcessor 클래스에는 두 가지 메소드가있다.

    1) postProcessBeforeInitialization - 이름으로 초기화 전에 필요한 조치가 취해 지는지 확인하는 데 사용됩니다. 예 : 원격 소스 / 서비스에서 특정 등록 정보 파일 / 읽기 데이터를로드하려고합니다.

    2) postProcessAfterInitialization - 빈 참조가 응용 프로그램에 주어지기 전에 초기화 후에 수행하려는 작업.

    다음과 같이 수명주기에서 질문 된 방법의 순서 :

    1) BeanPostProcessor.postProcessBeforeInitialization ()

    2) init ()

    3) BeanPostProcessor.postProcessAfterInitialization ()

    4) destroy ()

    sysout이있는 간단한 예제를 작성하고 순서를 점검하여이를 점검 할 수 있습니다.

  3. ==============================

    3.그리고 하나 더 주요 차이점은 InitializingBean, DisposableBean 관련 afterPropertiesSet () & destory () 메소드는 paratmeters 및 반환 유형도 무효화하므로 모든 맞춤 로직을 구현하지 않았습니다. 그러나 PostProcessBeforeInitialization (Object bean, String beanName)과 postProcessAfterInitilization (Object bean, String beanName)은 두 개의 매개 변수를 받아 들여 객체를 반환하므로 initilization 로직과 전달을 기반으로하는 모든 사용자 정의 로그인을 작성할 수 있습니다. 콩...

    그리고 하나 더 주요 차이점은 InitializingBean, DisposableBean 관련 afterPropertiesSet () & destory () 메소드는 paratmeters 및 반환 유형도 무효화하므로 모든 맞춤 로직을 구현하지 않았습니다. 그러나 PostProcessBeforeInitialization (Object bean, String beanName)과 postProcessAfterInitilization (Object bean, String beanName)은 두 개의 매개 변수를 받아 들여 객체를 반환하므로 initilization 로직과 전달을 기반으로하는 모든 사용자 정의 로그인을 작성할 수 있습니다. 콩...

    이 두 가지 콜백 메소드는 bean 라이프 사이클을 포함하고 있으며 다음과 같은 라이프 사이클이 있습니다

    1) BeanPostProcessor.postProcessBeforeInitilazation ()

    2) @postConstruct 또는 InitializingBean.afterPropertiesSet () 또는 초기화 메소드입니다.    xml / *에서 정의하는 경우 3 가지 방법을 사용할 수있는 경우 동일한 oredr을 따릅니다. ** /

    3) BeanPostProcessor.postProcessAfterInitialization ()

    4) @preDestroy 또는 DisposibleBean.destroy () 또는 xml에 정의 된 메소드 삭제      / * 세 가지 방법을 사용할 수있는 경우 여기에 동일한 oredr을 따릅니다. ** /

  4. ==============================

    4.Init 및 Destroy 콜백 메소드는 Spring Bean 수명주기 단계의 일부입니다. init 메소드는 bean 인스턴스화 후에 실행될 것이다. 비슷하게, destroy 메소드는 bean 마무리 전에 실행될 것입니다.

    Init 및 Destroy 콜백 메소드는 Spring Bean 수명주기 단계의 일부입니다. init 메소드는 bean 인스턴스화 후에 실행될 것이다. 비슷하게, destroy 메소드는 bean 마무리 전에 실행될 것입니다.

    구현 인터페이스 InitializingBean과 DisposableBean을 사용하거나 @postconstruct와 @predestroy 어노테이션을 사용하여이 기능을 구현하거나 init 메소드와 destroy-method 속성으로 을 선언 할 수 있습니다.

    BeanPostProcessor 인터페이스는 Spring 컨테이너에 의해 수행되는 사전 및 사후 Bean 설정을 원하는 경우 프레임 워크의 기능을 확장하는 데 사용됩니다.

    예 : 기본적으로 Spring은 @PostConstruct와 @PreDestroy 주석을 인식하지 못한다. 이것을 가능하게하기 위해서 우리는 CommonAnnotationBeanPostProcessor를 등록하거나 빈 설정 파일에 를 지정해야한다. 여기서 CommonAnnotationBeanPostProcessor는 미리 정의 된 주석을위한 BeanPostProcessor 구현입니다. 처럼:

    @Required는 RequiredAnnotationBeanPostProcessor 처리 도구를 활성화합니다. @Autowired는 AutowiredAnnotationBeanPostProcessor 처리 도구를 활성화합니다.

  5. ==============================

    5.이 컴포넌트는 Spring IoC 컨테이너에서 생성부터 삭제까지 여러 단계를 거친다. 이 컴퍼넌트가 작성되기 전에,이 컴퍼넌트의 초기화 조작을 실행할 필요가있는 경우가 있습니다. 마찬가지로 IoC 컨테이너에서 구성 요소를 제거하고 제거하기 전에 일부 작업이 필요할 수 있습니다. 이 Spring 프레임 워크에서는 컴포넌트 라이프 사이클 관리를위한 메소드를 정의 할 수 있습니다.

    이 컴포넌트는 Spring IoC 컨테이너에서 생성부터 삭제까지 여러 단계를 거친다. 이 컴퍼넌트가 작성되기 전에,이 컴퍼넌트의 초기화 조작을 실행할 필요가있는 경우가 있습니다. 마찬가지로 IoC 컨테이너에서 구성 요소를 제거하고 제거하기 전에 일부 작업이 필요할 수 있습니다. 이 Spring 프레임 워크에서는 컴포넌트 라이프 사이클 관리를위한 메소드를 정의 할 수 있습니다.

    컴포넌트가 BeanPostProcessor 인터페이스를 구현하면, Spring IoC 컨테이너는이 인터페이스의 메소드 인 postProcessBeforeInitialization ()을 호출한다. postProcessAfterInitialization ()입니다. 이 후에 구성 요소는 사용 준비가 끝나고 IoC 컨테이너에 남아있게됩니다. init-method 속성에 지정된 메소드가이 두 메소드 사이에서 호출됩니다. (실제로, 컴퍼넌트가이 인터페이스를 구현하고있는 경우는, 인터페이스 InitializingBean의 afterPropertiesSet () 메소드의 전에)

    구성 요소가 DisposableBean 인터페이스를 구현하면 Spring IoC 컨테이너는이 인터페이스의 메소드 destroy ()를 호출합니다. 그 후에는 destroy-method 속성에 지정된 메소드라고합니다. 이 후에 구성 요소가 파괴됩니다.

    속성들에 열거 된 메소드들을 사용하는 것이 바람직하다. 인터페이스의 구현 BeanPostProcessor와 DisposableBean은 컴포넌트들과 Spring API 사이의 연결을 만든다.

  6. ==============================

    6.위의 모든 답변에 대한 간단한 보충 : 빈즈에 로거를 삽입하거나, 특성 파일을 설정하거나, 기본값을 설정하는 것과 같이 모든 일반 bean에 공통적으로 적용해야하는 공통 논리 리플렉션을 통해 콩의 필드 값 @Overriden 콜백 (예 : BeanPostProcessor 인터페이스를 구현하는 경우 postProcessBeforeInitialization (Object arg0, String arg1)); 모든 콩에 동일한 논리를 복제하는 대신

    위의 모든 답변에 대한 간단한 보충 : 빈즈에 로거를 삽입하거나, 특성 파일을 설정하거나, 기본값을 설정하는 것과 같이 모든 일반 bean에 공통적으로 적용해야하는 공통 논리 리플렉션을 통해 콩의 필드 값 @Overriden 콜백 (예 : BeanPostProcessor 인터페이스를 구현하는 경우 postProcessBeforeInitialization (Object arg0, String arg1)); 모든 콩에 동일한 논리를 복제하는 대신

  7. ==============================

    7.a) postProcessBeforeInitialization ()은 빈 초기화 전에 호출됩니다.

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

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

    가장 큰 차이점은 postProcessBeforeInitialization () 메소드에 의해 초기화가 완료된 후에 위의 3 가지 메소드가 호출된다는 것입니다.

    이러한 메소드가 완료되면 postProcessAfterInitialization () 메소드가 호출 된 다음 destroy 메소드가 동일한 순서로 호출됩니다.

  8. from https://stackoverflow.com/questions/9862127/what-is-the-difference-between-beanpostprocessor-and-init-destroy-method-in-spri by cc-by-sa and MIT license