Spring-Bean的作用域和生命周期

本文详细解析了Spring中的singleton和prototype单例模式的区别,以及Bean的生命周期过程。强调了Java面试前刷题的重要性,推荐《一线大厂Java面试题解析》资源。
摘要由CSDN通过智能技术生成

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

我们用例子来认清singleton和prototype的区别:

1.singleton

由于singleton是默认属性,故不需要怎么配置:

测试:

@Test

public void test3(){

//解析bean3.xml文件 , 生成管理相应的Bean对象

ApplicationContext context = new ClassPathXmlApplicationContext(“bean3.xml”);

//getBean : 参数即为spring配置文件中bean的id .

Blog blog=context.getBean(“blogBean”,Blog.class);

Blog blog2=context.getBean(“blogBean”,Blog.class);

System.out.println(blog);

System.out.println(blog2);

}

输出:

可以看出两者是同一个对象

2、prototype

测试:

@Test

public void test3(){

//解析bean3.xml文件 , 生成管理相应的Bean对象

ApplicationContext context = new ClassPathXmlApplicationContext(“bean3.xml”);

//getBean : 参数即为spring配置文件中bean的id .

Blog blog=context.getBean(“blogBean”,Blog.class);

Blog blog2=context.getBean(“blogBean”,Blog.class);

System.out.println(blog);

System.out.println(blog2);

}

输出:

可以看出在调用getBean方法时候会创建多实例对象

根据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。

2 Bean的生命周期

===========

生命周期:从对象的创建到对象的销毁过程。

2.1 bean的生命周期


Bean的生命周期主要分为七步

(1)通过构造器创建bean实例(无参数构造)

(2)为bean的属性设置值和对其他bean引用(调用set方法)

(3)把bean实例传递bean后置处理器的方法postProcessBeforeInitialization

(4)调用bean的初始化的方法(需要进行配置初始化的方法)

(5)把bean实例传递bean后置处理器的方法 postProcessAfterInitialization

(6)bean可以使用了(对象获取到了)

(7)当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)

2.2  演示生命周期


接下来我们通过代码来演示Bean的生命周期:

(1)创建类,实现接口BeanPostProcessor创建后置处理器

package com.yixin.post;

import org.springframework.beans.BeansException;

import org.springframework.beans.factory.config.BeanPostProcessor;

public class MyBeanPost implements BeanPostProcessor {

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {

System.out.println(“第三步:在初始化之前执行的方法”);

return bean;

}

public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

System.out.println(“第五步:在初始化之后执行的方法”);

return bean;

}

}

2)在XML文件中进行配置自定义的后置处理器

(3)编写实体类进行测试

package com.yixin.dao;

public class Book {

private int id;

private String name;

public Book(){

System.out.println(“第一步:执行无参构造方法创建bean实例”);

}

public Book(int id, String name) {

this.id = id;

this.name = name;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

System.out.println(“第二步:调用set方法设置属性值”);

}

//创建执行的初始化的方法

public void initMethod() {

System.out.println(“第四步:执行初始化的方法”);

}

//创建执行的销毁的方法

public void destroyMethod() {

System.out.println(“第七步:执行销毁的方法”);

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

(4)编写XML,并绑定该实体类的初始化方法和销毁方法。

(5)测试

@Test

public void test4(){

//解析bean4.xml文件 , 生成管理相应的Bean对象

ApplicationContext context = new ClassPathXmlApplicationContext(“bean4.xml”);

//getBean : 参数即为spring配置文件中bean的id .

Book book=context.getBean(“bookBean”,Book.class);

System.out.println(“第六步:获取创建bean实例对象”);

}

运行结果:

通过这样的演示,就可以很直观的看到Bean的生命周期了。


最后

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

  • Java核心知识整理

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

Java核心知识

  • Spring全家桶(实战系列)

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

  • 其他电子书资料

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
心知识

  • Spring全家桶(实战系列)

[外链图片转存中…(img-25TG1oyR-1714662606743)]

  • 其他电子书资料

[外链图片转存中…(img-vhxc9HmZ-1714662606743)]

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

[外链图片转存中…(img-ve0nAQ6V-1714662606743)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Bean 的作用域生命周期Spring 框架中非常重要的两个概念,这里简单介绍一下。 1. Bean 的作用域Spring 中,Bean 的作用域指的是 Bean 实例的创建和销毁的范围。Spring 提供了以下五种作用域: - singleton:单例模式,容器中只有一个 Bean 实例,所有对 Bean 的请求都将返回同一个实例。 - prototype:每次请求都会创建一个新的 Bean 实例。 - request:每个 HTTP 请求都会创建一个新的 Bean 实例。 - session:每个 HTTP Session 都会创建一个新的 Bean 实例。 - global session:基于 Servlet 3.0+ 的环境下,每个全局的 HTTP Session 都会创建一个新的 Bean 实例。 2. Bean 的生命周期 Bean 的生命周期指的是 Bean 实例从创建到销毁的整个过程。Spring 提供了以下七个阶段: - 实例化 Bean:Spring 根据 Bean 的定义创建一个 Bean 的实例。 - 设置 Bean 属性:Spring 将配置文件中的属性设置到 Bean 实例中。 - BeanNameAware:如果 Bean 实现了 BeanNameAware 接口,SpringBean 的 ID 传递给 setBeanName 方法。 - BeanFactoryAware:如果 Bean 实现了 BeanFactoryAware 接口,SpringBeanFactory 实例传递给 setBeanFactory 方法。 - InitializingBean:如果 Bean 实现了 InitializingBean 接口,Spring 将调用 afterPropertiesSet 方法。 - 自定义初始化方法:Bean 可以配置自定义的初始化方法。 - DisposableBean:如果 Bean 实现了 DisposableBean 接口,Spring 将调用 destroy 方法。 - 自定义销毁方法:Bean 可以配置自定义的销毁方法。 以上就是 Spring Bean 的作用域生命周期的简单介绍。理解 Bean 的作用域生命周期对于正确使用 Spring 框架非常重要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值