bean生命周期的四个阶段,bean的生命周期可以引用的接口

首页 > 经验 > 作者:YD1662022-11-01 14:03:51

Bean的生命周期可以简单分为11个周期:

1.构造方法。不管是反射获取和静态工厂获取都会调用Bean嵌套类的构造方法。

2.封装属性。封装Bean嵌套 类 的属性,值可以在对应xml文件的<Bean>标签内用<property>设置

3.实现BeanNameAware接口,实现setBeanName()方法。该方法是用来设置Bean的name,传来的值为xml里该Bean的Id值

4.实现BeanfactoryAware接口,实现setBeanFactory()方法。不设置的话有默认DefaultListableBeanFactory类。

5.重点。在Xml文件里配置实现BeanPostProcessor的类,实现接口的postProcessBeforeInitialization()方法,是预处理方法。比如权限的访问可以在这个方法中进行设置

6.实现InitializingBean接口,实现afterPropertiesSet()方法

7.调用自定义Bean初始化函数,初始化的方法需要在对应的类里面配,而且要写到xml文件里的init-method属性中

8.重点。在Xml文件里配置实现BeanPostProcessor的类,实现postProcessAfterInitialization()方法,后处理方法。和第七步在同一类下。

9.调用业务方法,调用获取到对象的方法即可。

10.实现DisposableBean接口,实现destroy()方法,父容器关闭时会调用。

11.实现自定义destory()方法,关闭时调用。

Xml文件 :


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="
  5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  6. <bean id="MyStudentStaticService" class="com.baidu.student.MyStudentStaticService" init-method="initMy" destroy-method="desMy" factory-method="getStudentService">
  7. <property name="name" value="aa"></property>
  8. </bean>
  9. <bean class="com.baidu.student.MyBeanProcess"></bean>
  10. </beans>

Bean嵌套的对象:


  1. package com.baidu.student;
  2. import org.springframework.beans.BeansException;
  3. import org.springframework.beans.factory.BeanFactory;
  4. import org.springframework.beans.factory.BeanFactoryAware;
  5. import org.springframework.beans.factory.BeanNameAware;
  6. import org.springframework.beans.factory.DisposableBean;
  7. import org.springframework.beans.factory.InitializingBean;
  8. public class StudentService implements BeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean{
  9. private String name;
  10. public String getName() {
  11. return name;
  12. }
  13. //--------------bean的11个声明周期----------------
  14. public StudentService(String a) {
  15. System.out.println("1.调用Bean对应的类构造方法");
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. System.out.println("2.封装属性 属性值在对应的Bean的xml文件里写---" name);
  20. }
  21. @Override
  22. public void setBeanName(String name) {
  23. //这个name==studentService
  24. System.out.println("3.实现BeanNameAware接口,实现setBeanName()方法---" name);
  25. }
  26. @Override
  27. public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
  28. //
  29. System.out.println("4.实现BeanFactoryAware接口,实现setBeanFactory()方法----Factory为" beanFactory.getClass());
  30. }
  31. //第五步在BeanProcess实现类里
  32. @Override
  33. public void afterPropertiesSet() throws Exception {
  34. System.out.println("6.实现InitializingBean接口,实现afterPropertiesSet()方法");
  35. }
  36. public void initMy() {
  37. System.out.println("7.调用自定义Bean初始化函数,初始化的方法需要在对应的类里面配,而且要写到xml文件里");
  38. }
  39. //第八步在BeanProcess实现类里
  40. public void say() {
  41. System.out.println("9.调用业务方法,使用获取到的类的方法");
  42. }
  43. @Override
  44. public void destroy() throws Exception {
  45. System.out.println("10.实现DisposableBean接口,实现destroy()方法");
  46. }
  47. public void desMy() {
  48. System.out.println("11.实现自定义destory()方法,关闭时调用");
  49. }
  50. }

继承Bean类:


  1. package com.baidu.student;
  2. import org.springframework.beans.BeansException;
  3. import org.springframework.beans.factory.config.BeanPostProcessor;
  4. public class MyBeanProcess implements BeanPostProcessor{
  5. //该类需要在xml文件中配置
  6. @Override
  7. public Object postProcessAfterInitialization(Object bean, String name) throws BeansException {
  8. System.out.println("8.重点。在Xml文件里配置实现BeanPostProcessor的类,实现postProcessAfterInitialization()方法,后处理方法");
  9. return bean;
  10. }
  11. @Override
  12. public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException {
  13. System.out.println(name);
  14. System.out.println("5.重点。在Xml文件里配置实现BeanPostProcessor的类,实现接口的postProcessBeforeInitialization()方法,预处理方法");
  15. return bean;
  16. }
  17. }

测试方法:


  1. public class Test2 {
  2. @Test
  3. public void test() {
  4. ClassPathXmlapplicationContext applicationContext=new ClassPathXmlApplicationContext("beans2.xml");
  5. StudentService studentService = (StudentService) applicationContext.getBean("MyStudentStaticService");
  6. studentService.say();
  7. System.out.println(studentService.getName());
  8. applicationContext.close();
  9. }
  10. }

结果:

bean生命周期的四个阶段,bean的生命周期可以引用的接口(1)

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.