Spring - BeanPostProcessor

2020. 8. 16. 19:18Java/Spring

반응형

Bean 객체를 정의할 때 init-method 속성을 설정하면 객체가 생성될 때 자동으로 호출될 메서드를 지정할 수 있다.

이 때 BeanPostProcessor 인터페이스를 구현한 클래스를 정의하면 Bean 객체를 생성할 때 호출될 init 메서드 호출을 가로채 다른 메서드를 호출 수 있도록 할 수 있다.

 



import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class TestBeanProcess implements BeanPostProcessor{
	
	
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		// TODO Auto-generated method stub
		System.out.println("after");
		return bean;
	}
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		// TODO Auto-generated method stub
		System.out.println("before");
		return bean;
	}

}

bean에는 넘어온 bean 객체의 주소 값이 담겨있고, beanName은 id값이 담겨있다.

beanName을 이용하여 각 객체에 따라서 다른 설정을 줄 수 있다.

public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		// TODO Auto-generated method stub
		System.out.println("after");
		switch(beanName){
			case "t1":
				System.out.println("id가 t1인 객체 생성");
				break;
			case "t2":
				System.out.println("id가 t2인 객체 생성");
				break;
		}
		return bean;
	}

- postProcessBeforeInitialization : init-method에 지정된 메서드가 호출되기 전에 호출된다.

- postProcessAfterInitialization : init-method에 지정된 메서드가 호출된 후에 호출된다.

- init-method 가 지정되어 있지 않더라도 자동으로 호출된다.

 

beans 파일에 다음과 같이 클래스 위치를 선언해주자!

<bean class='kr.co.softcampus.process.TestBeanProcess'/>
반응형