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("执行销毁方法");
    }
}
相关推荐
Hyyy44 分钟前
Function Calling / Tool Use的原理和实现模式
前端·llm·ai编程
爱勇宝1 小时前
从 Ctrl+CV 到 Enter:程序员正在失去什么
前端·后端·程序员
徐小夕1 小时前
我们开源了一款“框架无关”的思维导图编辑器,3分钟集成到任意系统
前端·javascript·github
PBitW1 小时前
GPT训练我的第三天,明白了应该咋说满分回答!😕😕😕
前端·javascript·面试
像我这样帅的人丶你还2 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩2 小时前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
摸着石头过河的石头2 小时前
前端多仓库管理:从混乱到有序的进化之路
前端
星栈2 小时前
写 Dioxus Demo 不难,难的是把它写成项目
前端·rust·前端框架
labixiong2 小时前
还原一个完整符合规范的 Promise(二)
前端·javascript
时光足迹2 小时前
腾讯云 TRTC UniApp SDK 从入门到上线
前端·vue.js·uni-app