spring bean声明周期

bean的装载顺序:

0.获取bean的定义

1.createBean 创建bean的实例

2.populateBean 对bean的属性赋值

3.initializeBean.初始化bean

3.1invokeAwareMethods 处理AWARE接口方法的回调

3.2 applyBeanPostProcessorsBeforeInitialization应用后置处理器

3.3 invokeinitMethods 执行自定义的初始化方法

3.4 applyBeanPostProcessorsAfterInitialization bean初始化后执行后置处理的方法

4.bean创建成功

5.bean注册到beanFactory中

看个具体事例理解bean声明周期

package day02bean;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 Dog构造方法
 bean实现了BeanNameAware接口,就调用回调方法
 bean实现了BeanFactoryAware接口,就调用回调方法
 bean实现了ApplicationContextAware接口,就调用回调方法
 调用BeanPostProcessor的初始化预处理方法postProcessBeforeInitialization方法
 @PostConstruct 标注的方法
 bean 实现了 InitializingBean 就调用 afterPropertiesSet 方法
 bean被定义的时候自定义的初始化方法
 调用BeanPostProcessor的初始化后置处理方法postProcessAfterInitialization方法
 bean可以被使用了
 容器关闭后的方法
 @PreDestroy 标记的销毁方法
 DisposableBean 的销毁方法
 bean被定义的时候自定义的销毁方法
 */
public class Dog implements InitializingBean,DisposableBean,BeanNameAware,BeanFactoryAware,ApplicationContextAware {
	
	@Override
	public void destroy() throws Exception {
		System.out.println("----DisposableBean -destroy-------");
	}

	@Override
	public void afterPropertiesSet() throws Exception {
		System.out.println("---InitializingBean--afterPropertiesSet-------");
	}
	
	public Dog() {
		System.out.println("---Dog----");
	}
	
	public void init() {
		System.out.println("-----Dog init----");
	}
	
	public void destory() {
		System.out.println("-----Dog destory----");
	}
	
	public void hello(){
		System.out.println("------Dog hello-----");
	}
	
	@PostConstruct
	public void PostConstruct() {
		System.out.println("------Dog PostConstruct-----");
	}
	
	@PreDestroy
	public void PreDestroy() {
		System.out.println("------Dog PreDestroy-----");
	}

	@Override
	public void setBeanName(String name) {
		System.out.println("-----BeanNameAware----");
	}

	@Override
	public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
		System.out.println("----BeanFactoryAware---");
	}

	@Override
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		System.out.println("------ApplicationContextAware---");
	}
}

 

执行结果和分析如下:

---Dog----
-----BeanNameAware----
----BeanFactoryAware---
------ApplicationContextAware---
---MyBeanPostProcesor --postProcessBeforeInitialization-----Dog
------Dog PostConstruct-----
-----afterPropertiesSet-------
-----Dog init----
---MyBeanPostProcesor --postProcessAfterInitialization-----Dog
------Dog hello-----
七月 25, 2018 6:18:41 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext doClose
信息: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@1d56ce6a: startup date [Wed Jul 25 18:18:41 CST 2018]; root of context hierarchy
------Dog PreDestroy-----
-----destroy-------
-----Dog destory----

分析:

---Dog---- bean的构造方法

--属性赋值----

-----BeanNameAware---- 如果实现了BeanNameAware接口,调用他的方法

----BeanFactoryAware--- 如果实现了BeanFactoryAware接口,调用他的方法

------ApplicationContextAware--- 如果实现了ApplicationContextAware接口,调用他的方法

---MyBeanPostProcesor --postProcessBeforeInitialization-----Dog----- BeanPostProcesor的预处理初始化方法

------Dog PostConstruct----- @PostConstruct注解标记的方法

-----afterPropertiesSet------- 如果bean实现了 InitializingBean接口就调用 afterPropertiesSet 方法

-----Dog init---- bean定义的时候自定义的初始化方法

---MyBeanPostProcesor --postProcessAfterInitialization-----Dog

------Dog hello----- bean可以被使用了

七月 25, 2018 6:18:41 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext doClose

信息: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@1d56ce6a: startup date [Wed Jul 25 18:18:41 CST 2018]; root of context hierarchy

------Dog PreDestroy----- @PreDestroy注解标记的方法

-----destroy------- 如果bean实现了 DisposableBean接口就调用 afterPropertiesSet 方法

-----Dog destory---- bean定义的时候自定义的销毁方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值