Application容器中bean的生命周期

来源:互联网 发布:anaconda python教程 编辑:程序博客网 时间:2024/06/06 12:21

1.Spring容器只能管理singleton作用域Bean的生命周期,Spring容器知道Bean何时创建、何时初始化、何时销毁。

2.Spring初始化bean的过程,代码演示如下:

package com.learnSpring08;import org.springframework.beans.BeansException;import org.springframework.beans.factory.BeanNameAware;import org.springframework.beans.factory.InitializingBean;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;public class Phone implements BeanNameAware,ApplicationContextAware,InitializingBean{    private int id;    private String name;    private double price;    public Phone(){        System.out.println("Spring创建Phone对象实例");    }    public void setId(int id) {        System.out.println("Spring调用setId()方法执行依赖注入id值");         this.id = id;    }    public void setName(String name) {        System.out.println("Spring 调用setName()方法执行依赖注入name值");        this.name = name;    }    public void setPrice(double price) {        System.out.println("Spring 调用setPrice()方法执行依赖注入price");        this.price = price;    }    @Override    public String toString() {        return "Phone [id=" + id + ", name=" + name + ", price=" + price + "]";    }    public void init(){        System.out.println("正在执行初始化init()方法....");    }    @Override    public void afterPropertiesSet() throws Exception {        System.out.println("正在执行初始化方法afterPropertiesSet() ");    }    @Override    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {        System.out.println("设置bean的应用上下文");    }    @Override    public void setBeanName(String name) {        System.out.println("设置bean的名字");    }}<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">   <bean id="phone"  class="com.learnSpring08.Phone" init-method="init">   <property name="id"  value="6666"></property>   <property name="name"  value="华为"></property>   <property name="price"  value="4999"></property>   </bean></beans>package com.learnSpring08;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class testPhone {    @Test    public void testDemo(){        ApplicationContext context=new ClassPathXmlApplicationContext("bean07.xml");        Phone p=context.getBean("phone",Phone.class);    }}控制台输出结果为:Spring创建Phone对象实例Spring调用setId()方法执行依赖注入id值Spring 调用setName()方法执行依赖注入name值Spring 调用setPrice()方法执行依赖注入price设置bean的名字设置bean的应用上下文正在执行初始化方法afterPropertiesSet() 正在执行初始化init()方法....总结:从输出结果可以看出Spring容器创建一个bean实例的全部过程。

3.Spring销毁bean的全过程

package com.learnSpring08;import org.springframework.beans.factory.DisposableBean;public class Phone implements DisposableBean{    private int id;    private String name;    private double price;    public Phone(){        System.out.println("Spring创建Phone对象实例");    }    public void setId(int id) {        System.out.println("Spring调用setId()方法执行依赖注入id值");         this.id = id;    }    public void setName(String name) {        System.out.println("Spring 调用setName()方法执行依赖注入name值");        this.name = name;    }    public void setPrice(double price) {        System.out.println("Spring 调用setPrice()方法执行依赖注入price");        this.price = price;    }    @Override    public String toString() {        return "Phone [id=" + id + ", name=" + name + ", price=" + price + "]";    }    public void close(){        System.out.println("正在执行初始化close()方法....");    }    @Override    public void destroy() throws Exception {        System.out.println("正在执行销毁之前的方法destroy()");    }}<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">   <bean id="phone"  class="com.learnSpring08.Phone" destroy-method="close">   <property name="id"  value="6666"></property>   <property name="name"  value="华为"></property>   <property name="price"  value="4999"></property>   </bean></beans>package com.learnSpring08;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.AbstractApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class testPhone {    @Test    public void testDemo(){        ApplicationContext context=new ClassPathXmlApplicationContext("bean07.xml");        Phone p=context.getBean("phone",Phone.class);        ((AbstractApplicationContext) context).close();    }}控制台输出结果为:Spring创建Phone对象实例Spring调用setId()方法执行依赖注入id值Spring 调用setName()方法执行依赖注入name值Spring 调用setPrice()方法执行依赖注入price八月 17, 2017 11:15:36 上午 org.springframework.context.support.ClassPathXmlApplicationContext doClose信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@6ed3ef1: startup date [Thu Aug 17 11:15:36 CST 2017]; root of context hierarchy正在执行销毁之前的方法destroy()正在执行初始化close()方法....
原创粉丝点击