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 装配到需要的类中(取操作)

猜你喜欢

转载自blog.csdn.net/qq_54773998/article/details/124981431