Spring은 BeanPostProcessor, BeanFactoryPostProcessor, BeanValidationPostProcessor 및 기타 후 처리기와 같은 개발자가 확장 할 수있는 많은 후 프로세서를 제공합니다. 사용 방법의 대부분은 비슷합니다. 그들 중 하나를 이해하고 사용 방법을 습득하면 다른 방법은 유사하게 이해할 수 있습니다.
여기서 우리는 BeanPostProcessor를 사용하여 사용 방법을 보여주는 예제로 사용합니다.
BeanPostProcessor 인터페이스는 개발자가 사용자 정의 할 수있는 두 가지 방법을 제공합니다 : 후 프로세스 전신 - 이니 니닝 및 후 프로세스 감독관화 후.
후 프로세스 전신 정보 화 :이 방법은 주로 Bean이 초기화 될 때 초기화 메소드를 호출하기 전에 프로세스를 사용자 정의하기위한 스프링을위한 것입니다.
후 프로세스 감독관 :이 방법은 주로 Bean 초기화시 초기화 메소드를 호출 한 후 프로세스를 사용자 정의하기위한 스프링을위한 것입니다.
샘플 코드 :
/** * 테스트 Bean */public class cat {개인 문자열 이름; 사적인 int 연령; public void say () {system.out.println ( "이름 :" + name); System.out.println ( "Age :" + age); } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public int getage () {반환 연령; } public void 설정 (int Age) {this.age = age; }} /*** Custom PostProcessor*/public class catbeanpostprocessor는 beanpostprocessor {@nullable @override public object postprocessbeforeinitialization (object bean, string bean name)을 구현합니다 beansexception {if (bean instanceof cat) {// 출력 원래 속성 고양이 Cat = bean; cat.say (); 귀환 콩; } 반환 Bean; } @nullable @override public Object postprocessafterinitialization (객체 bean, 문자열 beanname)은 beansexception {if (bean instanceof cat) {// 속성 값을 수정하고 고양이 cat = (cat) bean; cat.setName ( "Hello Maomi"); cat.setage (3); 귀환 고양이; } 반환 Bean; }} /** * run */public class run {public static void main (String [] args) {ApplicationContext ApplicationContext = new ClassPathXmlApplicationContext ( "Spring-Bean.xml"); Cat Cat = (Cat) ApplicationContext.getBean ( "Cat"); cat.say (); }}XML 구성 정보
<!-bean을 구성하고 초기화-> <bean id = "cat"> <property name = "name"value = "hellokitty" /<property name = "age"value = "1" /> < /bean> <bean id = "CatbeanPostProcessor" />
출력 결과 :
이름 : Hellokitty
나이 : 1
이름 : Hello Maomi
나이 : 3
후 프로세서를 통해 처리 된 Bean 정보가 변경되었음을 알 수 있습니다. 마지막으로 소스 코드에서 사용자 정의 구현을 호출하는 방법을 살펴 보겠습니다.
초기화 Bean 방법 : AbstractAutoweRecapableBeanFactory.java
/** * 초기화 bean */보호 된 객체 초기화 비난 (최종 문자열 beaname, 최종 객체 bean, @Nullable rootBeanDefinition MBD) {// 관련없는 코드 객체의 일부를 생략합니다. // 초기화 전에 if (mbd == null ||! mbd.issynthetic ()) {trappedBean = applyBeanPostProcessorsbeForeInitialization (WrappedBean, BeanName); } try {// 초기화 메소드를 호출하여 Bean invokeInitMethods (Beanname, WrappedBean, MBD); } catch (Throwable ex) {throw new beancreationException ((mbd! = null? mbd.getResourcedScription () : null), "init 메소드의 호출", ex); } // if (mbd == null ||! mbd.issynthetic ()) {wrappedBean = applyBeanPostProcessorsAfterInitialization (WrappedBean, BeanName); } return WrappedBean; } // postprocessbeforeinitialization 메소드 호출 @override public object applyBeanPostProcessorsbeForeInitialization (Object EnciverningBean, String Beanname)은 beansexception {object result = 기존 비난; for (beanpostprocessor beanprocessor : getBeanPostProcessors ()) {// 사용자 정의 후 프로세스 비 전신 정보화 메소드 객체 전류를 호출합니다. if (current == null) {return result; } result = current; } 반환 결과; } // postProcessAfterinitialization 메소드 @override public Object ApplyBeanPostProcessorsAfterInitialization (Object EncordingBean, String Beanname)은 Beansexception {object result = 기존 비난; for (beanpostprocessor beanprocessor : getBeanPostProcessors ()) {// 사용자 정의 postProcessAfterinitialization 메서드 호출 객체 current = beanprocessor.postProcessAfterinitialization (result, beanname); if (current == null) {return result; } result = current; } 반환 결과; }위는 사용자 정의 방법을 구현하기위한 스프링의 호출 프로세스입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.