Spring에서 BeanPostProcessor와 init / destroy 메소드의 차이점은 무엇입니까?
이행의 차이 BeanPostProcessor
무엇 입니까 인터페이스 및 중 하나를 사용하여 init
/ destroy
봄의 XML 구성 파일의 방법 속성 또는 구현 InitializingBean
/ DisposableBean
인터페이스는?
이것은 Container Extension Points 에 대한 Spring 문서에서 매우 명확하게 설명 합니다.
BeanPostProcessor 인터페이스는 자체 인스턴스화 논리, 해결 논리 등을 제공하기 위해 구현할 수있는 방법을 정의합니다. Spring 컨테이너가 Bean의 인스턴스화, 구성 및 초기화를 완료 한 후 일부 사용자 정의를 구현할 하나 이상의 BeanPostProcessor 구현을 수행 할 수 있습니다.
즉, 초기화 postProcessBeforeInitialization
된 메서드 BeanPostProcessor에 정의 된 메서드 는 빈 초기화 호출되고 (이름에서 알 수 있습니다.) postProcessAfterInitialization
빈 초기화 후에 호출됩니다.
@PostConstruct
, InitializingBean
및 user-정의 init
메소드 의 차이점 은 이들이 콩 자체에서 정의된다는 것입니다. 순서는 Spring 문서 의 생명주기 메커니즘 결합 섹션 에서 사용할 수 있습니다 .
따라서 기본적으로 BeanPostProcessor는 다른 bean이 단위로 정의되는 경우 여러 bean에 대한 사용자 정의 인스턴스화 논리를 수행하는 데 사용할 수 있습니다.
위의 답변은 매우 중요한 부분 중 일부를 명확하게 설명합니다.
그 외에도 beanPostProcessor와 init 및 destroy 메소드가 모두 Spring Bean 사이클의 일부라는 것을 이해하는 것도 중요합니다.
BeanPostProcessor 클래스에는 두 가지 방법이 있습니다.
1) postProcess 초기화하기 전에 필요한 작업이 수행 확인하는 데 사용하기 전에 명확하게 알 수 있습니다. 예를 들어 원격 소스 / 서비스에서 특정 속성 파일을로드하거나 데이터를 읽고 싶습니다.
2) postProcessAfterInitialization- 응용 프로그램에 Bean 참조가 제공되기 전에 초기화 후 수행하려는 모든 작업.
다음과 같이 라이프 사이클에서 질문 된 방법의 순서 :
1) BeanPostProcessor.postProcessBeforeInitialization ()
2) 초기화 ()
3) BeanPostProcessor.postProcessAfterInitialization ()
4) 파괴 ()
sysout이있는 간단한 예제를 작성하여이를 확인하고 순서를 확인할 수 있습니다.
그리고 또 하나의 주요 차이점은 InitializingBean, DisposableBean과 관련된 afterPropertiesSet () 및 destory () 메소드가 매개 변수를 허용하지 즉시 반환 유형도 void 사용자 정의에서 구현하지 않습니다. BeanPostProcess 메소드에 오면 postProcessBeforeInitialization (Object bean, String beanName) 및 postProcessAfterInitilization (Object bean, String beanName) 은이 두 개의 변수를 허용하고 Object 유형도 반환됩니다. 전달을 기반으로하는 사용자 정의 로그인 대신 초기화를 사용할 수 있습니다. . 콩 ...
이 두 번의 라이프 사이클 기능에는 Bean 라이프 사이클이 포함되어 있으며 다음은 다음과 같은 라이프 사이클입니다.
1) BeanPostProcessor.postProcessBeforeInitilazation ()
2) @postConstruct 또는 InitializingBean.afterPropertiesSet () 또는
xml / * 에서 정의하는 초기화 메서드 도 여기에서 세 가지 방법을 사용할 수있는 경우 해당 oredr을 ** /
3) BeanPostProcessor.postProcessAfterInitialization ()
4) @preDestroy 또는 DisposibleBean.destroy () 또는 xml / * 에서 정의하는 destroy 메소드 도 여기에서 세 가지 방법을 사용할 수있는 경우 oredr을 ** /
Init 및 Destroy 메소드 는 Spring Bean 라이프 사이클 단계의 일부입니다. 초기화 방법은 콩 인스턴스 후에 실행 될을 구석으로입니다. 유사하게, 파괴 메소드는 빈 종료 전에 실행될 것입니다.
인터페이스 InitializingBean
및 구현을 사용 DisposableBean
하거나 @postconstruct
및 주석을 사용 하여이 기능 현관을 구현 @predestroy
하거나 <bean>
와 init-method
및 destroy-method
속성을 선언 할 수 있습니다.
BeanPostProcessor 인터페이스 는 Spring 컨테이너에 의해 수행되는 구성 Pre- 및 Post-Bean 초기화를 수행하려는 경우 프레임 워크의 기능을 확장하는 데 사용됩니다.
예 : 기본적으로 Spring은 @PostConstruct
및 주석 @PreDestroy
을 인식하지 않습니다 . 이를 활성화 활성화 빈 설정 파일을 등록 CommonAnnotationBeanPostProcessor
하거나 지정해야 <context:annotation-config />
합니다. 다음 CommonAnnotationBeanPostProcessor
은 주석 BeanPostProcessor
에 대한 사전 정의 된 구현입니다. 처럼 :
@Required 는 RequiredAnnotationBeanPostProcessor
처리 도구를 활성화합니다.
@Autowired 는 AutowiredAnnotationBeanPostProcessor
처리 도구를 활성화 합니다.
위의 모든 답변에 대한 간단한 보충 : 일반적인 논리가있는 경우 빈에 거 삽입, 속성 파일 설정, 설정과 같이 Spring Bean에 보편적으로 적용해야하는 공통 논리가있는 경우 반사를 통해 당신의 콩밭에 가치를; 그 자리를 한 곳에 넣을 수 있습니다. @Override
(예 : 인터페이스를 postProcessBeforeInitialization(Object arg0, String arg1)
구현하는 경우 BeanPostProcessor
); 모든 빈에서 라우팅을 복제하는 대신.
a) 빈 초기화 전에 postProcessBeforeInitialization ()이 호출됩니다.
b) 빈이 초기화되면 Spring 문서에 따라 다음 순서로 다른 메서드가 호출됩니다.
- @PostConstruct로 주석 처리 된 메서드
- InitializingBean 인터페이스에 의해 정의 된 afterPropertiesSet ()
- XML을 통해 정의 된 메소드를 초기화합니다.
가장 큰 차이점은 postProcessBeforeInitialization () 메소드에 초기화가 호출 후 위의 세 메소드가 호출 할 것입니다.
메소드가 완료되면 postProcessAfterInitialization () 메소드가 호출되고 파괴 메소드가 동일한 순서로 호출됩니다.
@PreDestroy로 주석이 달린 메서드
DisposableBean 응용 인터페이스에 의해 정의 된 destroy ()
XML을 통해 정의 된 destroy () 메소드.
'ProgramingTip' 카테고리의 다른 글
C #에서 사전 간의 동등성 테스트 (0) | 2021.01.06 |
---|---|
SQL에서 UNION 뒤의 어디 문? (0) | 2021.01.06 |
Gradle을 사용하여 모든 모듈에 대한 공통 Android 속성을 정의하는 방법 (0) | 2021.01.06 |
R에서 벡터의 요소로 많은 행을 나누는 방법 (0) | 2021.01.06 |
브라우저 아이콘을 활용 WebStorm (0) | 2021.01.06 |