原理图
https://www.processon.com/apps/5d1c16dde4b076f4fd3f5c40
package com.beanPostProcessor; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.core.PriorityOrdered; import org.springframework.stereotype.Component; @Component public class Lwj_BeanPostPocessor implements BeanPostProcessor, PriorityOrdered { //实现PriorityOrdered,实现getOrder方法返回一个数值越小越靠前执行 @Override public int getOrder() { return 102; } //初始化之前植入的切面方法 @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if("wjwTest".equals(beanName)){ System.out.println("Lwj_BeanPostPocessor之前的方法"); } return bean; } //初始化之后植入的切面方法 @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if("wjwTest".equals(beanName)){ System.out.println("Lwj_BeanPostPocessor之后的方法"); } return bean; } }
此方式是spring提供的扩展点之一,spring中一共存在五种扩展方式。
再应用中单例(singleton)调用原型(prototype)可以使用两种方式
Lookup方式 需要注意的是@Lookup只能注解在方法上,这个时候可以注解在一个抽象方法上。
实现ApplicationContextAware接口实现set方法,此方式是重新创建一个beanFactory然后从工厂中再获取一个bean此时这个newBean与原工厂中的oldBean类型一致但在LVM的堆中不属于同一个