봄에 Bean Post Processor와 init/destroy 방법의 차이점은 무엇입니까?
입니까를 하는 것과 입니까?BeanPostProcessor
다 중 할 수 있습니다.init
/destroy
을 Spring때 XML합니다를 합니다.InitializingBean
/DisposableBean
인터페이스?
이는 컨테이너 확장 지점에 대한 스프링 문서에서 꽤 명확하게 설명되어 있습니다.
BeanPostProcessor 인터페이스는 사용자 고유의 인스턴스화 로직, 종속성 해결 로직 등을 제공(또는 컨테이너의 기본값을 재정의)하기 위해 구현할 수 있는 콜백 메서드를 정의합니다.Spring 컨테이너가 빈 인스턴스화, 구성 및 초기화를 마친 후 사용자 지정 로직을 구현하려면 하나 이상의 BeanPostProcessor 구현을 연결할 수 있습니다.
은 postProcessBeforeInitialization
BeanPost 된 내용은 알 수 있듯이)되며, 로 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을 따릅니다. **/
위의 모든 답변에 대한 간단한 보충 자료입니다.일반적인 논리가 있다면, 여러분의 콩에 로거를 주입하는 것, 속성 파일 설정, 반사를 통해 콩의 밭에 기본값을 설정하는 것과 같이 여러분의 모든 봄 콩에 보편적으로 적용되어야 하는 공통적인 논리를 가지고 있다면, 여러분은 그 논리를 한 곳에 넣을 수 있습니다:@Override
n 콜백(예:postProcessBeforeInitialization(Object arg0, String arg1)
만약 당신이 실행하고 있다면,BeanPostProcessor
interface); 모든 콩에 동일한 논리를 복제하는 대신.
a)빈을 초기화하기 전에 postProcessBeforeInitialization()이 호출됩니다.
b)빈이 초기화되면 Spring 문서에 따라 다른 콜백 메소드가 다음 순서로 호출됩니다.
- @PostConstruct로 주석이 달린 메소드
- 빈 콜백 인터페이스 초기화에 의해 정의된 대로 afterPropertiesSet()
- XML을 통해 정의된 init 메서드입니다.
주요 차이점은 postProcessBeforeInitialization() 방법으로 초기화가 완료된 후 위 3가지 방법이 호출된다는 것입니다.
이 메소드들이 완료되면 메소드 postProcessInitialization() 후에는 다음과 같은 순서로 파괴 메서드가 호출됩니다.
@PreDestroy 주석이 달린 메서드
destroy()는 일회용 빈 콜백 인터페이스에 의해 정의된 것입니다.
XML을 통해 정의된 destroy() 메서드입니다.
언급URL : https://stackoverflow.com/questions/9862127/what-is-the-difference-between-beanpostprocessor-and-init-destroy-method-in-spri
'sourcetip' 카테고리의 다른 글
K&R 연습 1-9: 입력을 출력하여 여러 공백을 하나의 공백으로 대체 (0) | 2023.10.10 |
---|---|
Update_rows_log_event::ha_update_row(-1) 뒤에 있는 Mysql 복제 (0) | 2023.10.10 |
Python의 C/C++ 프로그램용 가상 Env와 동등한 것이 있습니까? (0) | 2023.10.10 |
MySQL 워크벤치 : .sql 파일로 mysql 데이터베이스를 내보내는 방법? (0) | 2023.10.10 |
MySQL은 다른 필드를 좋아합니다. (0) | 2023.10.10 |