Bean 後置處理器
阿新 • • 發佈:2019-02-20
IOC容器自動識別後置處理器InitBeforBean 改bean實現BeanFactoryPostProcessor 該介面,更改 BeanLife bean的屬性值和作用域
@Test public void valueTest(){ ApplicationContext context = new AnnotationConfigApplicationContext("com.huo.SprinBootDmeo");//獲取該資料夾下所有的工廠bean //ApplicationContext context = new AnnotationConfigApplicationContext(BeanLife.class); BeanLife beanLife = context.getBean(BeanLife.class); // System.out.println(beanLife.getRemark()); AbstractApplicationContext abstractApplicationContext = (AbstractApplicationContext) context; abstractApplicationContext.registerShutdownHook(); }
@Component public class InitBeforBean implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { System.out.println("BeforeInitialization 初始化bean之前========================: " ); BeanDefinition bd = configurableListableBeanFactory.getBeanDefinition("beanLife"); MutablePropertyValues pv = bd.getPropertyValues(); pv.addPropertyValue("remark","屬性值改一下"); //bean的作用域也該一下 bd.setScope(BeanDefinition.SCOPE_SINGLETON); } }
執行結果:BeforeInitialization 初始化bean之前========================: 建構函式初始化bean後呼叫bean銷燬後呼叫@Component public class BeanLife { private String remark; public BeanLife(){ System.out.println("建構函式"); } @PostConstruct public void init(){ System.out.println("初始化bean後呼叫"); } @PreDestroy public void destroy(){ System.out.println("銷燬bean之前呼叫"); } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } }