Spring中bean用法(2):生命周期

一:基本流程

把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理

1.Bean的建立 由BeanFactory读取Bean定义文件,并生成各个实例。2.Setter注入 执行Bean的属性依赖注入。3.BeanNameAware的setBeanName() 如果Bean类实现了org.springframework.beans.factory.BeanNameAware接口,则执行其setBeanName()方法。4.BeanFactoryAware的setBeanFactory() 如果Bean类实现了org.springframework.beans.factory.BeanFactoryAware接口,则执行其setBeanFactory()方法。5.BeanPostProcessors的processBeforeInitialization() 容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,,则任何Bean在初始化之前都会执行这个实例的processBeforeInitialization()方法。6.InitializingBean的afterPropertiesSet() 如果Bean类实现了org.springframework.beans.factory.InitializingBean接口,则执行其afterPropertiesSet()方法。7.Bean定义文件中定义init-method 在Bean定义文件中使用“init-method”属性设定方法名称,如下:<bean id="demoBean" class="com.yangsq.bean.DemoBean" init-method="initMethod"> …….</bean> 这时会执行initMethod()方法,注意,这个方法是不带参数的。8.BeanPostProcessors的processAfterInitialization() 容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processAfterInitialization()方法。9.DisposableBean的destroy() 在容器关闭时,如果Bean类实现了org.springframework.beans.factory.DisposableBean接口,则执行它的destroy()方法。10.Bean定义文件中定义destroy-method

在容器关闭时,可以在Bean定义文件中使用“destory-method”定义的方法

二:使用案例

1.案例截图

2.基本代码

package com.cloud.beanlife;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.InitializingBean;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;public class PersonService implements BeanNameAware,BeanFactoryAware,ApplicationContextAware,InitializingBean{private String name;private Integer age;public PersonService(){System.out.println("实例化对象");}public PersonService(String abc){System.out.println("实例化对象");}public String getName() {return name;}public void setName(String name) {System.out.println("调用了setName函数");this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public void sayhello(){System.out.println("hello:"+name+"的年龄是"+age);}//该方法可以传递ApplicationContext@Overridepublic void setApplicationContext(ApplicationContext arg0)throws BeansException {System.out.println("setApplicationContext "+arg0);}//可以通过注解的方式配置<bean init-method="init">初始化方法@PostConstructpublic void init(){System.out.println("自己的init方法");}//该方法可以传递beanFactory@Overridepublic void setBeanFactory(BeanFactory arg0) throws BeansException {System.out.println("setBeanFactory "+arg0);}//该方法的arg0表示正在被实例化的bean的id 是多少@Overridepublic void setBeanName(String arg0) {System.out.println("setBeanName被调用 值是"+arg0);}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("afterPropertiesSet");}//可以通过注解的方式配置<bean destroy-method="mydestory">销毁方法@PreDestroypublic void mydestroy(){System.out.println("生命周期结束,释放各种资源");}}

package com.cloud.beanlife;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;public class MyBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessAfterInitialization(Object arg0, String arg1)throws BeansException {System.out.println("postProcessAfterInitialization 函数被调用");System.out.println(arg0+"被创建的 时间是"+new java.util.Date());return arg0;}@Overridepublic Object postProcessBeforeInitialization(Object arg0, String arg1)throws BeansException {System.out.println("postProcessBeforeInitialization 函数被调用");return arg0;}}

3.配置代码

今日的执着,会造成明日的后悔。

Spring中bean用法(2):生命周期

相关文章:

你感兴趣的文章:

标签云: