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("执行销毁方法");
    }
}
相关推荐
guodingdingh36 分钟前
软件开发工作问题总结0718
java·开发语言·数据库
寅时码2 小时前
React 之死·终章:一个 useRef,把闭包陷阱、依赖数组、漫天 rerender 全送走
前端·react.js·ai编程
不好听6132 小时前
HTML 事件监听机制:从 DOM Level 0 到 React 合成事件
前端·react.js·html
wordbaby2 小时前
为什么刷新页面就 404?聊聊 SPA 路由与 Nginx 的那点事
前端
咖啡八杯2 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
不好听6132 小时前
React 核心概念:JSX、组件与数据驱动
前端·react.js
触底反弹2 小时前
🔥 React 零基础入门(中):500 行屎山代码到组件化的蜕变
前端·javascript·react.js
不好听6132 小时前
React vs Vue:两大前端框架技术选型深度对比
前端·vue.js·react.js
GuWenyue2 小时前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
前端·数据库·人工智能
GuWenyue2 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法