图解
实例化(Instantiation):
spring启动后,会查找和加载需要被spring管理的Bean,并且实例化.
一般有BeanFactory和ApplicationCoutext两大Spring的核心接口实现
public class Student implements InitializingBean {
private String msg;
public Student() {
System.out.println("Student创建了......实例化");
}
public Student(String msg) {
this.msg = msg;
}
public void setMsg(String msg) {
}
}
属性赋值:即注入对象依赖的属性值(对象)
实例化后,Bean被封装在BeanWrapper中,Spring会根据BeanDefinition中的信息进行依赖注入。并且会根据通过BeanWrapper通过接口的属性完成依赖注入
<bean id="student" class="com.apesource.pojo.Student">
<!--属性赋值-->
<property name="msg" value="西安"></property>
</bean>
public class Student implements InitializingBean {
private String msg;
public Student() {
}
public Student(String msg) {
this.msg = msg;
System.out.println("Student的属性赋值");
}
public void setMsg(String msg) {
}
}
处理各种aware接口: Spring会检测该对象是了xxxAware接口,并将相关实例注入给Bean。
如果Bean实现BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,注入Bean的名字
如果Bean实现BeanClassLoaderAware接口,会调用setBeanClassLoader( )方法,注入ClassLoader对象的实例
如果Bean实现BeanFactoryAware接口,会调用它实现的setBeanFactory( )方法,注入的是Spring方法
如果BeanApplicationContextAware接口,会调用setApplicationContext( )方法,注入Spring的上下文
执行BeanPostProcessor的前置处理
<bean class="com.apesource.processor.MyBeanPostProcessor"></bean>
实现BeanPostProcessor接口
public class MyBeanPostProcessor implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("BeanPostProcessor中的Before方法======》");
return bean;
}
}
执行initializingBean系统初始化方法
初始化 Bean,对各项属性赋初始化值。初始化前后执行 BeanPostProcessor,实现initializingBean接口
public class Student implements InitializingBean {
private String msg;
public Student() {
}
public Student(String msg) {
this.msg = msg;
}
public void afterPropertiesSet() throws Exception {
System.out.println("Student系统初始化");
}
public void setMsg(String msg) {
}
}
i执行nit-method自定义初始化
init-method 用于在Bean初始化时指定执行方法,用来替代继承 InitializingBean接口。只有一个类完整的实例被创建出来后,才能走初始化方法。
<bean class="com.apesource.processor.MyBranFactory" init-method="init" </bean>
public class Student implements InitializingBean {
private String msg;
public Student() {
}
public Student(String msg) {
this.msg = msg;
//自定义初始化
public void doinit(){
System.out.println("Student初始化1");
}
public void setMsg(String msg) {
}
}
执行BeanPostProcessor的后置处理
实现BeanPostProcessor接口
public class MyBeanPostProcessor implements BeanPostProcessor {
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("BeanPostProcessor中的After方法--------->");
return bean ;
}
}
操作使用(以上步骤后,表示bean成功创建,可以正常使用)
执行DisposableBean 系统销毁
容器关闭后,如果 Bean 实现了 DisposableBean 接口,则会回调该接口的 destory()方法
public class Student implements InitializingBean {
private String msg;
public Student() {
}
public Student(String msg) {
this.msg = msg;
}
public void setMsg(String msg) {
}
public void destory(){
System.out.println("Student销毁了");
}
}
配置了destroy-method 方法自定义销毁
destroy-method 方法,则会执行 destroy-method 配置的方法,实施bean工厂的自定义销毁
<bean class="com.apesource.processor.MyBranFactory" destroy-method="desoyr"></bean>