Bean的初始化过程图解
BeanFactoryPostProcessor、 BeanPostProcessor、
InitializingBean这些操作需要被spring容器加载
示例如下:
- BeanFactoryPostProcessor操作
//自定义BeanFactoryPostProcessor的操作
public class MyBeanFactory implements BeanFactoryPostProcessor {
@Override
//工厂后处理bean接口核心操作
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("bean工厂制作好了,还有什么事情需要处理");
}
}
----------------------------------------------------------------------
@Import(MyBeanFactory.class) //在spring配置类中导入BeanFactoryPostProcessor实现类,将其加载到spring容器中
@ComponentScan(value = "com.it")
public class SpringConfig {
}
- BeanPostProcessor操作
public class MyBean implements BeanPostProcessor {
@Override
//所有bean初始化前置操作
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("bean之前巴拉巴拉");
System.out.println(beanName);
return bean;
}
@Override
//所有bean初始化后置操作
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("bean之后巴拉巴拉");
return bean;
}
}
------------------------------------------------------------------------
@Import(MyBean.class) //在spring配置类中导入BeanPostProcessor实现类,将其加载到spring容器中
@ComponentScan(value = "com.it")
public class SpringConfig {
}
- InitializingBean操作
public class EquipmentDaoImpl implements EquipmentDao,InitializingBean {
public void save() {
System.out.println("equipment dao running...");
}
@Override
//定义当前bean初始化操作,功效等同于init-method属性配置
public void afterPropertiesSet() throws Exception {
SqlSessionFactoryBean fb;
System.out.println("EquipmentDaoImpl......bean ...init......");
}
}
FactoryBean与BeanFactory区别
- FactoryBean:封装单个bean的创建过程
- BeanFactory:Spring容器顶层接口,定义了bean相关的获取操作