IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> spring中bean的生命周期 -> 正文阅读

[Java知识库]spring中bean的生命周期

1、spring中bean的生命周期

(1)概念

在spring框架中,所有的bean对象都有生命周期,就是指bean的创建、初始化、服务、销毁的一个过程。

(2)bean的生命周期

  • bean的定义

在spring中通常是通过配置文档的方式来定义Bean的,在一个配置文件中可以定义多个Bean

  • bean的初始化

默认在IOC容器加载的时候实例化对象(ApplicationContext是,Beanfactory只有在调用getBean的时候才进行实例化):生命周期(初始化、销毁方法、BeanPostProcessor后处理Bean) - 怀梦想,致远方 - 博客园

  • bean的使用

通过ApplicationContext对象或Beanfactory对象获取bean

  • 销毁

(3)代码的方式演示Bean的生命周期

创建Student类:

public class Student implements BeanNameAware {
    private String sname;
    @Override
    public String toString() {
        return "Student{" +
                "sname='" + sname + '\'' +
                '}';
    }

    public Student() {
        System.out.println("bean创建了");
    }
    public void setSname(String sname) {
        System.out.println("设置对象属性setName()..");
        this.sname = sname;
    }

    //Bean的初始化方法
    public void initStudent() {
        System.out.println("初始化Bean");
    }

    //实现BeanNameAware接口的setBeanName(),传递Bean的ID。
    @Override
    public void setBeanName(String sname) {
        System.out.println("调用BeanNameAware的setBeanSname,返回的ID值是:" +sname);
    }

    //Bean的使用
    public void use() {
        System.out.println("使用Bean");
    }

    //Bean的销毁方法
    public void destroyStudent() {
        System.out.println("销毁Bean");
    }
}

其中调用接口后要实现接口的setBeanName方法,该方法的作用是返回bean的ID值

再创建一个类,书写Bean后置处理器相关的方法:

public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
        System.out.println("前方法"+s);
        return o;
    }

    @Override
    public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
        System.out.println("后方法"+s);
        return o;
    }
}

spring的配置文件:

 <bean name="student" class="com.zhb.bean.Student" init-method="initStudent" destroy-method="destroyStudent">

    </bean>
    <bean class="com.zhb.test.MyBeanPostProcessor"></bean>

第二个是配置后处理器的bean,只需要配置类全名,不需要配置ID等,spring可以自动识别并注入。

测试结果:

2、总结

  • Bean?容器找到配置文件中?Spring Bean?的定义(配置文件或注解的方式定义)

  • Bean?容器利用Java Reflection API创建一个Bean的实例(ApplicationContext或Beanfactory)

  • 如果涉及到一些属性值,利用set()方法设置一些属性值。

  • 如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的ID

  • 如果?Bean?实现了`BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入?ClassLoader对象的实例。

  • 类似的,如果实现了其他?*.Aware接口,就调用相应的方法。

  • 如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执行postProcessBeforeInitialization()?方法

  • 如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法。

  • 如果?Bean?在配置文件中的定义包含 ?init-method?属性,执行指定的方法。

  • 如果有和加载这个?Bean的?Spring?容器相关的?BeanPostProcessor?对象,执行postProcessAfterInitialization()方法

  • 当要销毁?Bean?的时候,如果?Bean?实现了?DisposableBean?接口,执行?destroy()?方法。

  • 当要销毁?Bean?的时候,如果?Bean?在配置文件中的定义包含?destroy-method?属性,执行指定的方法。

    ?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-31 23:49:43  更:2022-03-31 23:55:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:53:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码