当前位置: 首页 > news >正文

Spring学习笔记7 Bean的生命周期

Spring学习笔记6 Bean的实例化方式_biubiubiu0706的博客-CSDN博客

Spring其实就是一个管理Bean对象的工厂.它负责对象的创建,对象的销毁.

这样我们才可以知道在哪个时间节点上调用了哪个类的哪个方法,知道代码该写在哪里

Bean的生命周期之粗略5步

Bean生命周期的管理可以参考Spring的源码:

AbstractAutowireCapableBeanFactory

Bean的生命周期之粗略7步

比前面增加了两步,这两步放在上面第三步:初始化Bean  自定义init方法的前后

可以假如"Bean后处理器"

需要这个类实现BeanPostProcessor类,并重写before和after方法

Bean的生命周期10步

就是又增加了三个接口

Aware相关的接口包括:BeanNameAware,BeanClassLoaderAware,BeanFactoryAware

当Bean实现了BeanNameAware,Spring会将Bean的名字传递给Bean

当Bean实现了BeanClassLoaderAware,Spring会将加载该Bean的类加载器传递给Bean

当Bean实现了BeanFactoryAware,Spring会将Bean工厂对象传递给Bean

测试以上十步,让类实现5个接口,并实现所有方法:

BeanNameAware

BeanClassLoaderAware

BeanFactoryAware

InitializingBean

DisposableBean

package com.example.bean;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*;/*** Bean的生命周期按照粗略的5步:* 1.实例化Bean(调用无参构造方法)* 2.给Bean属性赋值(调用set方法)* 3.调用init方法,注意这个init方法需要自己写,自己配(方法名随意)* 4.可以使用bean* 5.销毁Bean,会调用destroy方法,需要自己写,自己配(方法名随意)* @author hrui* @date 2023/9/24 3:16*/
public class User implements BeanNameAware, BeanClassLoaderAware, BeanFactoryAware, InitializingBean ,DisposableBean{private String name;public void setName(String name) {System.out.println("第二步:给对象属性赋值");this.name = name;}public User() {System.out.println("第一步,无参构造方法执行");}public void initBean(){System.out.println("第三步:调用initBean方法");}public void destoryBean(){System.out.println("第五步:destoryBean方法销毁Bean");}@Overridepublic void setBeanClassLoader(ClassLoader classLoader) {System.out.println("这个Bean的类加载器:"+classLoader);}@Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {System.out.println("这个Bean的BeanFactory:"+beanFactory);}@Overridepublic void setBeanName(String name) {System.out.println("这个Bean的Name:"+name);}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("InitializingBean的afterPropertiesSet方法");}@Overridepublic void destroy() throws Exception {System.out.println("DisposableBean的destroy方法");}
}

Bean的生命周期中,不同的作用域有不同的管理方式

Spring是根据Bean的作用域来选择管理方式的.

对于singleton作用域的Bean,Spring能够精确地知道该Bean何时被创建,合适初始化,以及何时被销毁

而对于protoType作用域的Bean,Spring只负责创建,当容器创建了Bean的实例后,Bean的实例就交给客户端代码管理,Spring容器将不再跟踪其生命周期.

Spring容器只对singleton的bean进行完整的生命周期管理

如果是prototype作用域的Bean,Spring容器只负责将该Bean初始化完毕.等客户端程序一旦获取到该Bean之后,Spring容器就不再管理该对象生命周期

也就是说scope是prottype的Bean执行完"Bean后处理器"交给客户端使用后就不管了

将自己new的对象让Spring管理

有时候可能会遇到这样的需求,某个java对象是我们自己new的,然后我们希望这个对象被Spring容器管理,怎么实现.

之前都是Spring配置文件中配置,然后纳入Spring容器管理

如果我们想让该对象让Spring容器管理,但是又不想在配置文件里配置怎么办

例如

但是这个Bean并不由Spring管理

怎么办?用

DefaultListableBeanFactory注册

相关文章:

Spring学习笔记7 Bean的生命周期

Spring学习笔记6 Bean的实例化方式_biubiubiu0706的博客-CSDN博客 Spring其实就是一个管理Bean对象的工厂.它负责对象的创建,对象的销毁. 这样我们才可以知道在哪个时间节点上调用了哪个类的哪个方法,知道代码该写在哪里 Bean的生命周期之粗略5步 Bean生命周期的管理可以参考S…...

React 如何导出excel

在现代的Web开发中,数据导出是一个非常常见的需求。而在React应用中,我们经常需要将数据导出为Excel文件,以便用户可以轻松地在本地计算机上查看和编辑。本文将介绍如何在React应用中实现导出Excel文件的功能。 章节一:安装依赖 …...

Texlive2020 for win10 宏包更新

用命令提示符更新texlive的宏包,这个方法非常简单实用 1.以管理员身份打开命令提示符 2.系统自动选择镜像网站 tlmgr option repository ctan 3.更新宏包 tlmgr update --self --all 其中–self参数表示升级tlmgr本身,–all表示升级所有宏包,这样就可以将所有宏包更新了 4.列…...

Ps 在用鼠标滚轮缩放图片时,速度太快?

1.原因 在于安装了第三方鼠标优化软件Mos,它起着对第三方鼠标全局浏览效果的优化,使浏览更加顺滑,而不精确,消除了mac使用第三方鼠标浏览页面时的卡顿问题。这也使得像ps、ai这类软件,在进行页面缩放时,变得…...

基于docker进行Grafana + prometheus实现服务监听

基于docker进行Grafana Prometheus实现服务监听 Grafana安装Prometheus安装Jvm监控配置服务器主机监控(基础cpu,内存,磁盘,网络) Grafana安装 docker pull grafana/grafanamkdir /server/grafanachmod 777 /server/grafanadocker run -d -p…...

模型层及ORM介绍

模型层及ORM介绍 模型层 负责跟数据库之间进行通信 配置MySQL,下载MySQLclient 创建数据库 进入mysql数据库执行create database 数据库名 default charset utf8通常数据库名跟项目名保持一致settings.py里进行数据库的配置修改 DATABASES 配置项的内容&#x…...

QQ邮箱怎么设置SMTP接口服务器?

在现如今信息快速传递的时代,邮件已成为我们工作、学习和生活中必不可少的一部分。而作为每位用户必备的一款邮箱,QQ邮箱一直以其稳定、高效、安全的特点深受大家的青睐。但是你是否觉得每次发邮件都需要打开QQ邮箱网页,进行繁琐的操作很是麻…...

【操作系统笔记四】高速缓存

CPU 高速缓存 存储器的分层结构: 问题:为什么这种存储器层次结构行之有效呢? 衡量 CPU 性能的两个指标: 响应时间(或执行时间):执行一条指令平均时间 吞吐量,就是 1 秒内 CPU 可以…...

uniapp获取openid

要获取用户的openid,需要使用微信小程序的登录API。以下是一个简单的示例代码: // 在page中引入wx-login组件 import wxLogin from /components/wx-loginexport default {components: { wxLogin },data() {return {openid: }},methods: {// wxLogin组件…...

测试工程师面试之设计测试用例

以下的问题答案,仅供参考,如小伙伴们有更好的答案,欢迎大家评论区留言,谢谢大家 测试工程师面试之设计测试用例 1、请说一说简单用户界面登陆过程都需要做哪些分析2、 请对此系统设计测试用例:一个系统,多个…...

html页面仿word文档样式(vue页面也适用)

目录 文章title&#xff1a; 标题&#xff1a; 正文&#xff1a; 完整代码&#xff1a; 页面效果&#xff1a; 文章title&#xff1a; <div><h3 style"display: flex;justify-content: center; align-items: center; color: #000;">实验室招新报名公…...

如何在控制台打印sql语句

步骤一&#xff1a; log4j2.xml中做以下配置 <logger name"xxx.infrastructure.mysql.mapper"level"debug" additivity"false"><appender-ref ref"Console"/></logger>步骤二&#xff1a;IDEA下载Free Mybatis Plu…...

【Vue3 源码解析】reactive 全家桶

// 泛型约束&#xff1a;只能传入引用类型 export function reactive<T extends object>(target: T): UnwrapNestedRefs<T> // 判断只读&#xff0c;否则创建reactive响应式对象 export function reactive(target: object) {// if trying to observe a readonly pr…...

目标检测YOLO实战应用案例100讲-基于YOLO的遥感目标检测(续)

目录 3.4 YOLOv3 3.5 YOLOv4 3.6 YOLOv5 改进的YOLOv4算法 4.1 Triple Loss损失函数的应用...

7.5 通过API判断进程状态

进程状态的判断包括验证进程是否存在&#xff0c;实现方法是通过枚举系统内的所有进程信息&#xff0c;并将该进程名通过CharLowerBuff转换为小写&#xff0c;当转换为小写模式后则就可以通过使用strcmp函数对比&#xff0c;如果发现继承存在则返回该进程的PID信息&#xff0c;…...

你写过的最蠢的代码是?

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…...

MySQL与PostgreSQL对比

MySQLPostgreSQL数据类型支持支持JSON&#xff0c;但不如PostgreSQL支持更多的数据类型&#xff0c;如数组、hstore、JSON、JSONB、范围类型等扩展性有一些扩展性&#xff0c;但不如PostgreSQL支持自定义数据类型、函数、操作符&#xff0c;具有强大的扩展性SQL兼容性遵循SQL标…...

AD拼板技巧

AD拼板设置 如图&#xff0c;有一个需要拼板的PCB&#xff0c;想要在生产是拼接生产&#xff0c;节省材料。 操作如下&#xff1a; 1、全选如下&#xff0c;按复制CtrlC。 2、把输入法调整至英文&#xff0c;按快捷键E&#xff08;先&#xff09;&#xff0c; A&#xff08;后…...

Android滑动片段

本文所有的代码均存于 https://github.com/MADMAX110/BitsandPizzas 回到BitsandPizzas应用&#xff0c;之前已经创建过创建订单和发出反馈等功能。 修改披萨应用&#xff0c;让它使用标签页导航。在工具条下显示一组标签页&#xff0c;每个选项对应一个不同的标签页。用户单击…...

【力扣-每日一题】337. 打家劫舍 III

class Solution { public:pair<int,int> dfs_rob(TreeNode *root){//如果为根节点if(rootnullptr)return {0,0};auto [l,l_n]dfs_rob(root->left);auto [r,r_n]dfs_rob(root->right);int ol_nr_nroot->val;//当前节点偷&#xff0c;所获得的利益,子节点不能偷in…...

Docker部署FastDFS分布式存储

1、准备工作 docker pull qinziteng/fastdfs:5.05 Pwd"/data/software/fastdfs" mkdir ${Pwd}/{storage,tracker} -p2、创建TEST容器&#xff0c;将fastdfs目录COPY到本地&#xff0c;方便后续维护管理&#xff01; docker run -id --name fastdfs qinziteng/fastd…...

MyBatis基础之SqlSession

SqlSession 线程安全问题 当你翻看 SqlSession 的源码时&#xff0c;你会发现它只是一个接口。我们通过 MyBatis 操作数据库&#xff0c;实际上就是通过 SqlSession 获取一个 JDBC 链接&#xff0c;然后操作数据库。 SqlSession 接口有 3 个实现类&#xff1a; #实现类1Defa…...

笔记本电脑没有麦克风,声音无法找到输入设备

新买的电脑没有扬声器&#xff0c;电脑声音没有输入设备&#xff0c;在开腾讯会议的时候才发现竟然有这个问题。 网上找原因&#xff0c;哎&#xff0c;找了一大堆每一个靠谱的 这让我想起来上次电脑没有热键的问题&#xff0c;所有问题的终极解决方案&#xff0c;都在源头那里…...

MySQL基础—从零开始学习MySQL

01.MySQL课程介绍_哔哩哔哩_bilibili 1、MySQL安装 以管理员身份运行cmd net start mysql80net stop mysql80 客户端连接 1). 方式一&#xff1a;使用MySQL提供的客户端命令行工具 2). 方式二&#xff1a;使用系统自带的命令行工具执行指令 mysql [-h 127.0.0.1] [-P 3…...

单例模式设计

目标&#xff1a; 1. 饿汉模式 2. 懒汉模式 3. 饿汉模式优化 目录 饿汉模式 懒汉模式 懒汉模式优化 饿汉模式 由名字我们就可以知道 "饿汉" 嘛&#xff0c;就比较急切&#xff0c;在类加载的时候就创建实例&#xff1a; 1. 写一个类&#xff0c;在本类中构造实…...

轻量型服务器能支撑多少人访问?

一、服务器配置影响访问人数 服务器的配置是影响轻量型服务器能够支撑的访问人数的关键因素之一。通常而言&#xff0c;轻量型服务器的配置普遍不高&#xff0c;适合小型团队或个人使用。如果服务器配置较低&#xff0c;那么支撑访问人数的能力也会受到限制。较为简单的应用程序…...

python: Sorting Algorithms

# encoding: utf-8 # 版权所有 2023 涂聚文有限公司 # 许可信息查看&#xff1a;Python Sorting Algorithms # 描述&#xff1a; * https://www.programiz.com/dsa/counting-sort # * https://www.geeksforgeeks.org/sorting-algorithms/ # Author : geovindu,Geovin Du 涂…...

Python 安装js环境

在终端执行下面的命令 npm install jsdom jsdom 是一个实现了 DOM API 的 JavaScript 环境&#xff0c;用于在 Node.js 中模拟浏览器的 DOM 环境。execjs 使用 jsdom 这个模块来执行 JavaScript 代码。所以在你的系统中&#xff0c;需要先安装并配置好 jsdom 模块&#xff0c…...

2023华为杯数模C题——大规模创新类竞赛评审方案研究

B题——大规模创新类竞赛评审方案研究 思路&#xff1a;采用数据分析等手段改进评分算法性能 完成情况(1-2问已经完成) 代码下载 问题一 在每个评审阶段&#xff0c;作品通常都是随机分发的&#xff0c;每份作品需要多位评委独立评审。为了增加不同评审专家所给成绩之间的可比…...

人工神经网络ANN:数学总结

一、内容 径向基函数&#xff08;Radial basis function&#xff0c;RBF&#xff09;&#xff1a;一个取值仅依赖于到原点距离的实值函数&#xff0c;即。此外&#xff0c;也可以按到某一中心点c的距离来定义&#xff0c;即。 可以用于许多向函基数的和来逼近某一给定的函数&a…...

asp网站开门/百度指数数据来源

原本打算今天给大家分享普通窗帘电机加入zigbee模块&#xff0c;但是无法加入米家只能用上位机控制&#xff0c;所以还在研究模块协议栈中&#xff0c;望成功&#xff0c;下期再发。正文开始&#xff1a;先上图&#xff0c;各种主板。左到右依次是&#xff1a;门磁传感器&#…...

织梦网站主页/竞价推广和seo的区别

https://www.cnblogs.com/fnng/p/6111516.html 最近在整理接口测试相关的资料&#xff0c;所以&#xff0c;看到有关资料就会多看两眼。偶看到别人发的微信公众号。 Python接口测试框第一篇 --- python如何读取txt文件。 Python接口测试框第三篇 --- python如何读取XML文件。 P…...

什么网站可以做旅行行程/seo站内优化公司

Spring 4 异常处理参考文章&#xff1a; &#xff08;1&#xff09;Spring 4 异常处理 &#xff08;2&#xff09;https://www.cnblogs.com/chenpi/p/6117090.html &#xff08;3&#xff09;https://www.javazxz.com/thread-4831-1-1.html 备忘一下。...

简历做的很棒的网站/网站收录提交工具

JQ属性选取attr、prop、data的区别 ps&#xff1a;本人亲测&#xff0c;阿里云2核4G5M的服务器性价比很高&#xff0c;新用户一块多一天&#xff0c;老用户三块多一天&#xff0c;最高可以买三年&#xff0c;感兴趣的可以戳一下&#xff1a;阿里云折扣服务器 1、attr返回属性…...

一元云购手机网站建设/沈阳关键词优化费用

简介 pg_probackup是一个管理PostgreSQL数据库集群备份和恢复的工具。它的设计目的是对PostgreSQL实例执行定期的完整和增量的页面级备份&#xff0c;以便在发生故障时恢复服务器&#xff0c;与oracle rman类似&#xff0c;pg_probackup支持postgresql-9.5及更高版本。 pg_pr…...

法院网站管理系统源码/百度导航下载2022最新版官网

视频微课知识点一、四大发明四大发明是我们国家最伟大的文化成果。包括&#xff1a;造纸术、指南针、火药、活字印刷术。二、人物介绍蔡伦&#xff0c;字敬仲&#xff0c;桂阳郡宋阳(今湖南宋阳)人&#xff0c;生于东汉永平四年(公元61年)&#xff0c;卒于建光元年(公元121年)。…...