Bean总结

目录

一,Bean的生命周期

1.实例化Bean

2.设置属性

3.Bean的通知方法

4.预初始化方法

5.初始化方法

6.后初始化方法

7.销毁方法

执行流程图

实例化和初始化的区别

二,Bean的作用域

1.作用域

2.bean的作用域

3.六种作用域

singleton

prototype

request

session

application

websocket

4.单例作用域(singleton)和全局作用域(application)区别

三,Bean的执行流程 


一,Bean的生命周期

1.实例化Bean

为bean分配内存空间(通过反射调用构造方法实例化对象)

2.设置属性

bean的注入和装配

3.Bean的通知方法

顺序执行BeanNameAware,BeanFactoryAware,ApplicationContextAware的接口方法

4.预初始化方法

Bean对象初始化前,循环调用实现了BeanPostProcessor接口的预初始化方法(postProcessBeforeInitialization)

5.初始化方法

  • 执行 @PostConstruct 初始化方法,依赖注入操作之后被执行;
  • 执行自己指定的 init-method 方法(如果有指定的话);

6.后初始化方法

Bean对象初始化后,循环调用实现了BeanPostProcessor接口的后初始化方法
(postProcessAfterInitialization)

7.销毁方法

销毁容器的各种方法,如 @PreDestroy、DisposableBean 接口方法、destroy-method

执行流程图

实例化和初始化的区别

实例化和属性设置是 Java 级别的系统“事件”,其操作过程不可人工干预和修改;

初始化是给开发者提供的,可以在实例化之后,类加载完成之前进行自定义“事件”处理。 

二,Bean的作用域

1.作用域

限定程序中变量的可用范围叫做作用域,或者说在源代码中定义变量的某个区域就叫做作用域

2.bean的作用域

Bean 的作用域是指 Bean 在 Spring 整个框架中的某种行为模式,比如 singleton 单例作用域,就
表示 Bean 在整个 Spring 中只有一份,它是全局共享的,那么当其他人修改了这个值之后,那么另一个人读取到的就是被修改的值

3.六种作用域

  • singleton:单例作用域
  • prototype:原型作用域(多例作用域)
  • request:请求作用域
  • session:回话作用域
  • application:全局作用域
  • websocket:HTTP WebSocket 作用域

注:4 种状态是 Spring MVC 中的值,在普通的 Spring 项目中只有前两种

singleton

描述:该作用域下的Bean在IoC容器中只存在一个实例:获取Bean(即通过                                               applicationContext.getBean等方法获取)及装配Bean(即通过@Autowired注入)都是同               一 个对象
场景:通常无状态的Bean使用该作用域。无状态表示Bean对象的属性状态不需要更新
备注:Spring默认选择该作用域

prototype

描述:每次对该作用域下的Bean的请求都会创建新的实例:获取Bean(即通过
           applicationContext.getBean等方法获取)及装配Bean(即通过@Autowired注入)都是新               的对象实例。
场景:通常有状态的Bean使用该作用域

request

描述:每次http请求会创建新的Bean实例,类似于prototype
场景:一次http的请求和响应的共享Bean
备注:限定SpringMVC中使用

session

描述:在一个http session中,定义一个Bean实例
场景:用户回话的共享Bean, 比如:记录一个用户的登陆信息
备注:限定SpringMVC中使用

application

描述:在一个http servlet Context中,定义一个Bean实例
场景:Web应用的上下文信息,比如:记录一个应用的共享信息
备注:限定SpringMVC中使用

websocket

描述:在一个HTTP WebSocket的生命周期中,定义一个Bean实例
场景:WebSocket的每次会话中,保存了一个Map结构的头信息,将用来包裹客户端消息头,第一
           次初始化后,直到WebSocket结束都是同一个Bean。
备注:限定Spring WebSocket中使用

4.单例作用域(singleton)和全局作用域(application)区别

  • singleton 是 Spring Core 的作用域;application 是 Spring Web 中的作用域
  • singleton 作用于 IoC 的容器,而 application 作用于 Servlet 容器

三,Bean的执行流程 

Bean 执行流程(Spring 执行流程):

启动 Spring 容器 -> 实例化 Bean(分配内存空间,从无到有) ->Bean 注册到 Spring 中(存操作) -> 将 Bean 装配到需要的类中(取操作)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
原型bean和Spring bean是两个不同的概念。Spring bean是指在Spring容器中管理的对象,可以通过依赖注入的方式在应用程序中使用。而原型bean是Spring bean的一种特殊类型,它的作用域是原型(prototype),每次从容器中获取时都会创建一个新的实例。 在Spring中,单例bean和原型bean有不同的适用场景。单例bean适用于那些需要在整个应用程序中共享的对象,因为它们在容器中只有一个实例。而原型bean适用于那些需要频繁创建新实例的对象,因为每次从容器中获取时都会创建一个新的实例。 当在单例bean中注入原型bean时,原型bean的实例在注入时只会创建一次,因此在单例bean中使用原型bean时,实际上只有一个原型bean实例被共享。这可能不是我们期望的结果。 为了解决这个问题,可以使用Spring的代理模式来确保每次获取原型bean时都会创建一个新的实例。通过在原型bean的作用域注解中添加属性值proxyMode = ScopedProxyMode.TARGET_CLASS,可以实现这一目的。这样,每次调用原型bean时都会创建一个新的实例,避免了共享状态的问题。 总结起来,原型bean和Spring bean是不同的概念,原型bean的作用域是原型,每次从容器中获取时都会创建一个新的实例。在单例bean中注入原型bean时,需要注意原型bean实例的共享问题,可以使用代理模式来解决这个问题。 #### 引用[.reference_title] - *1* *3* [Spring注入之单例bean注入原型bean](https://blog.csdn.net/m0_37607945/article/details/113796861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Spring的单例bean与原型bean](https://blog.csdn.net/zmflying8177/article/details/99999410)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值