什么时bean的生命周期
Bean 是指在 Spring 容器中被管理的对象,它们可以被注入到其他对象中,也可以被其他对象所依赖。在 Spring 容器中,每个 Bean 都有一个生命周期,从创建到消亡的完整过程,例如人从出生到死亡的整个过程就是一个生命周期。
1、实例化
创建bean实例。
public class User {
private String mag;
public User() {
System.out.println("3.user无参构造实例化");
}
}
读取xml配置文件或注解创建BeanDefifinition对象。
将该对象保存到beanDefinitionMap中。
执行BeanFactoryPostProcessor工厂后处理器
创建以上接口实现类并重写方法,可以进行注册和修改功能。注册新的bean对象、修改bean对象id所对应的bean对象本身。
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
//注册新的
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
System.out.println("1.工厂后处理器注册新的");
}
//id
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
System.out.println("2.工厂后处理器修改id");
}
}
2、依赖注入
setter注入bean进行属性赋值
public class User {
private String mag;
public void setMag(String mag) {
this.mag = mag;
System.out.println("4.setter方法");
}
}
3、执行Aware的接口
bean的实体类实现aware接口常用方法
public class User implements BeanNameAware, BeanFactoryAware, ApplicationContextAware {
private String mag;
@Override
public void setBeanName(String s) {
System.out.println("5.BeanNameAware拿到JavaBean名字"+s);
}
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.out.println("6.BeanFactoryAware拿到bean工厂对象"+beanFactory);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println("7.ApplicationContextAware拿到spring容器对象"+applicationContext);
}
}
4、执行BeanPostProcessor后处理器的before()、after()方法回调
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("8.后处理器的before方法");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("11后处理器的after方法");
return bean;
}
}
5、在后处理器运行中初始化bean对象
1.实现InitializingBean接口初始化bean对象
2.自定义方法配合xml 的<init-method>bean标签属性
@Component
public class User implements InitializingBean {
private String mag;
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("9.接口初始化");
}
public void doint(){
System.out.println("10属性初始化");
}
}
6、Bean的应用
1.执行以上5步骤实例化并初始化的bean对象保存到singletonObjects中,开始进行业务操作。
public class Test01 {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("appliaction.xml");
Object user = context.getBean("user");
System.out.println(user);
context.close();
}
}
7、销毁
当不再需要bean时,或者当容器关闭时,如果bean实现了' DisposableBean '接口或使用' @PreDestroy ',则分别调用' destroy() '或带注释的方法,自定义销毁方法配合<destroy-method>bean标签属性。
public class User {
private String mag;
public void destroy(){
System.out.println("12.user销毁");
}
}