本文共 2989 字,大约阅读时间需要 9 分钟。
(1)通过构造器创建 bean 实例(无参数构造
)
(2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法
)
(3)调用 bean 的初始化的方法(进行配置初始化的方法
)
(4)bean 可以使用了(对象获取
)
(5)当容器关闭时候,调用 bean 的销毁的方法(进行配置销毁的方法
)
public class Orders { // 声明属性 private String oName; // 1.无参构造 public Orders() { System.out.println("第一步:执行无参构造器创建bean实例"); } // 2.set public void setoName(String oName) { this.oName = oName; System.out.println("第二步:调用set方法设置属性的值"); } // 3.创建执行的初始化的方法 --- 在xml文件中配置 public void initMethod() { System.out.println("第三步:执行初始化的方法"); } // 5.创建执行的bean销毁方法 public void destroyMethod() { System.out.println("第五步:执行销毁方法"); }}
init-method属性
,指定初始化方法destroy-method属性
,指定销毁bean的方法public class Test { @org.junit.Test public void test_orders(){ try { ApplicationContext context = new ClassPathXmlApplicationContext("Bean的生命周期/bean_Orders.xml"); // 4.获取bean实例对象 Orders orders = context.getBean("orders",Orders.class); System.out.println("第四步:获取创建的bean实例对象"); // 5.手动销毁bean实例对象 ((ClassPathXmlApplicationContext)context).close(); } catch (Exception e){ e.getMessage(); } }}
(1)通过构造器创建 bean 实例(无参数构造
)
(2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法
)
postProcessBeforeInitialization
(3)调用 bean 的初始化的方法(进行配置初始化的方法
)
postProcessAfterInitialization
(4)bean 可以使用了(对象获取
)
(5)当容器关闭时候,调用 bean 的销毁的方法(进行配置销毁的方法
)
public class MyBeanPost implements BeanPostProcessor { /** * 初始化之前调用 * @param bean * @param beanName * @return * @throws BeansException */ @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("在初始化之前执行的方法"); return bean; } /** * 初始化之后调用 * @param bean * @param beanName * @return * @throws BeansException */ @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("在初始化之后执行的方法"); return bean; }}
BeanPostProcessor接口
实现了后置处理器,那么后置处理器就会对当前配置文件中的所有bean都添加后置处理器的处理。图一:
图三:
注意:不管后面有没有创建明确的对象,都会执行配置文件的方法和属性,因为以上是默认的单例模式(设置 scope 值是 singleton 时候),
加载 spring 配置文件时候就会创建单实例对象
;多例模式(设置 scope 值是 prototype 时候),不是在加载 spring 配置文件时候创建 对象,而是在调用getBean方法时候创建多实例对象
,所以两者的生命周期有所不一样!
懒加载(lazy-init):
default ,true ,false
转载地址:http://wfeq.baihongyu.com/