Spring原理(Bean的生命周期)

一、Bean的作用域

Bean 的作⽤域是指 Bean 在 Spring 框架中的某种⾏为模式。
⽐如单例作⽤域: 表⽰ Bean 在整个 Spring 中只有⼀份, 它是全局共享的. 那么当其他⼈修改了这个值之后, 那么另⼀个⼈读取到的就是被修改的值

|-------------|-----------------------------------------|
| 作用域 | 说明 |
| singleton | 每个SpringIoc容器内同名称的Bean只有一个实例(单例)默认 |
| prototype | 每次使用该bean时会创建新的实例(非单例) |
| request | 每个HTTP请求生命周期内,创建新的实例(Web环境中,了解) |
| session | 每个HTTP Session生命周期内,创建新的实例(Web环境中,了解) |
| application | 每个ServletContext生命周期内,创建新的实例(Web环境中,了解) |
| websocket | 每个WebSocket生命周期内,创建新的实例(Web环境中,了解) |

一个ServletContext可以包含多个ApplicationContext,但是一般就只启动一个ApplicationContext

二、Bean的生命周期

Bean的生命周期可以分为以下5个部分:

1.实例化(为Bean分配内存空间)

2.属性赋值(Bean的注入和装配,比如@Autowired)

3.初始化

a.执行各种通知,如:BeanNameAware,BeanFactoryAware,ApplicationContextAware的接口方法

b.执行初始化方法

xml定义init-method

使用注解的方式@PostConstruct

执行初始化后置方法(@BeanPostProcessor)

4.使用Bean

5.销毁Bean

a.销毁容器的各种方法,如@PreDestory,DisposableBean接口方法,destroy-method

复制代码
@Component
public class BeanLifeComponent implements BeanNameAware {

    private Dog singletonDog;

    public BeanLifeComponent() {
        System.out.println("执行构造方法");
    }


    @Override
    public void setBeanName(String name) {
        System.out.println("执行通知BeanNameAware, name:" + name);
    }

    @PostConstruct  //初始化方法
    public void init() {
        System.out.println("执行初始化方法");
    }

    public void use() {
        System.out.println("执行use方法");
    }

    @PreDestroy
    public void destory() {
        System.out.println("执行销毁方法");
    }
}
相关推荐
rannn_1114 小时前
【力扣hot100】链表专题|160、206、234、141、142
java·算法·leetcode·链表·面试·开发
紫禁玄科5 小时前
Shai-Hulud:npm生态的自我复制蠕虫风暴
前端·npm·node.js
东风破_5 小时前
后端API没写好,前端难道干等着吗?
前端
IKUN家族5 小时前
Spring IoC&DI
java·spring·rpc
用户938515635075 小时前
从前后端分离到前端接口工程:React + MockJS + Vite 解析
前端·后端·全栈
用户938515635075 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformers.js 全链路实战(三)
前端·react.js·typescript
excel6 小时前
当前端行情变差,我们为什么还要坚持?
前端
鸿是江边鸟,曾是心上人6 小时前
快速搭建HTTPS本地开发环境
前端
山荷枝6 小时前
03-框架--Spring
java·后端·spring
To_OC7 小时前
写了 5 个表单 Demo 后,我终于彻底搞懂了 React 受控与非受控组件
前端·react.js·前端框架