spring初始化方法的执行顺序以及其原理

2023-11-06

Spring中初始化方法的执行顺序
首先通过一个例子来看其顺序

/**
 * 调用顺序 init2(PostConstruct注解) --> afterPropertiesSet(InitializingBean接口) --> init3(init-method配置)
 */
public class Test implements InitializingBean {
   

    public void init3(){
   
        System.out.println("init3");
    }

    @PostConstruct
    public void init2(){
   
        System.out.println("init2");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
   
        System.out.println("afterPropertiesSet");
    }
}

配置

<context:annotation-config/>
<bean class="com.cyy.spring.lifecycle.Test" id="test" init-method="init3"/>

通过运行,我们得出其执行顺序为init2(PostConstruct注解) --> afterPropertiesSet(InitializingBean接口) --> init3(init-method配置)。但是为什么是这个顺序呢?我们可以通过分析其源码得出结论。
首先在解析配置文件的时候,碰到context:annotation-config/自定义标签会调用其自定义解析器,这个自定义解析器在哪儿呢?在spring-context的spring.handlers中有配置

http\://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler

我们进入这个类看

public class ContextNamespaceHandler extends NamespaceHandlerSupport {
   

	@Override
	public void init() {
   
		registerBeanDefinitionParser("property-placeholder", new PropertyPlaceholderBeanDefinitionParser());
		registerBeanDefinitionParser("property-override", new PropertyOverrideBeanDefinitionParser());
		registerBeanDefinitionParser("annotation-config", new AnnotationConfigBeanDefinitionParser());
		registerBeanDefinitionParser("component-scan", new ComponentScanBeanDefinitionParser());
		registerBeanDefinitionParser("load-time-weaver", new LoadTimeWeaverBeanDefinitionParser());
		regis
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring初始化方法的执行顺序以及其原理 的相关文章

  • 简单 XML 框架:ElementMap 中的对象具有“类似内联”的行为

    我正在尝试在 Android 上序列化自定义对象的 Hashmap 以获得如下 xml
  • Java,顺序流在哪个线程中执行?

    在阅读有关流的文档时 我遇到了以下句子 attempting to access mutable state from behavioral parameters presents you with a bad choice if you
  • 了解 netty 通道缓冲区和水印

    我正在尝试了解网络缓冲区和水印 作为一个测试用例 我有一个 netty 服务器 它向客户端写入数据 客户端被阻止 基本上每次读取之间有 10 秒的睡眠时间 在正常 I O 下 如果接收方被阻塞 TCP 发送方将受到限制 由于流量控制 发送速
  • 是否可以使用 Java 读写 Parquet,而不依赖 Hadoop 和 HDFS?

    我一直在寻找这个问题的解决方案 在我看来 如果不引入对 HDFS 和 Hadoop 的依赖 就无法在 Java 程序中嵌入读写 Parquet 格式 它是否正确 我想在 Hadoop 集群之外的客户端计算机上进行读写 我开始对 Apache
  • 垂直 ViewPager 中的动画

    我需要垂直制作这个动画ViewPager https www youtube com watch v wuE 4jjnp3g https www youtube com watch v wuE 4jjnp3g 这是我到目前为止所尝试的 vi
  • Java 小程序在 Mac 上闪烁

    这个问题很奇怪 问题并非在每个平台上都会发生 我在使用 MacOSX 的 Google Chrome 中出现了这种情况 但在 Safari 中却没有出现这种情况 对于使用 Windows 的朋友来说 在 Google Chrome 上运行得
  • 如何准确判断 double 是否为整数? [复制]

    这个问题在这里已经有答案了 具体来说 在 Java 中 我如何确定double是一个整数 为了澄清 我想知道如何确定 double 实际上不包含任何分数或小数 我主要关心的是浮点数的性质 我想到的方法 以及我通过谷歌找到的方法 基本上遵循以
  • Apache Thrift Java-Javascript 通信

    我正在编写一个基于 Apache Thrift 的 Java 服务器 它将从 Javascript 客户端接收数据 我已经完成了 Java 服务器 但问题是我可以获得 Javascript 客户端的工作示例 我无法找到一个好的示例 构建文档
  • 获取Android库中的上下文

    我正在编写一个 Android 应用程序 它的一些功能封装在内部库中 但是 要使此功能发挥作用 库需要一个应用程序上下文的实例 为图书馆提供这种上下文的最佳方式是什么 我看到了一些选择 但没有一个有吸引力 Have my library c
  • 使用全局变量从内部函数获取空字符串

    请帮助我解决一些小问题 我确信你能做到 D 我试图在 firestore 文档 user cases information 上设置一个字段 其中包含一个字段 case number 首先我声明这个全局变量 private String c
  • 在拇指上方显示修改后的 JSlider 值

    有没有一种简单的方法可以在使用某些 外观和感觉 的同时更改 JSlider 上方标签中显示的值 为了清楚起见 我正在谈论这个值 具体来说 我想显示除以 1000 的值而不是值本身 我知道如果我显示它们 我可以为刻度设置标签 但用户将不得不猜
  • Java 中如何验证字符串的格式是否正确

    我目前正在用 Java 编写一个验证方法来检查字符串是否是要更改为日期的几种不同格式之一 我希望它接受的格式如下 MM DD YY M DD YY MM D YY 和 M D YY 我正在测试第一种格式 每次它都告诉我它无效 即使我输入了有
  • JERSEY:错误跟踪:java.lang.IllegalStateException:实体输入流已关闭

    我正在使用 Jersey 2 x 以下是我的控制器 GET Path id Produces application json public Response getUser PathParam id int userId Context
  • 接口是否像对象一样对待?

    为什么下面的代码可以工作 interface I class A implements I public String toString return in a class B extends A public String toStrin
  • 如何在 Spring Mvc 项目中设置上下文根

    我在 Tomcat 服务器中使用 Spring MVC 项目 每次运行应用程序时 服务器上下文根都会更改 如何设置固定上下文根 我的项目名称是 DemoApplication 首先部署此上下文根 路径是 http localhost 808
  • 如何使用eclipse调试JSP tomcat服务?

    我想使用 Eclipse IDE 调试器来调试单独运行的 JSP Struts Tomcat Hibernate 应用程序堆栈 如何设置 java JVM 和 eclipse 以便设置断点 监视变量值并查看当前正在执行的代码 我刚刚用谷歌搜
  • 为什么不能在 if 语句中声明变量?

    以下 Java 代码无法编译 int a 0 if a 1 int b 0 if a 1 b 1 为什么 不能有任何代码路径导致程序将 1 分配给b无需先声明 我突然想到b的变量范围可能仅限于第一个if声明 但后来我不明白为什么 如果我实在
  • Firebase:用户注册后如何进行电话号码验证?

    所以我知道我可以使用电子邮件验证或电话号码验证 但我想做的是在用户注册或登录后进行电话号码验证 如何连接这两种身份验证方法 最后 Firebase中是否有一个函数可以检查用户是否通过电话号码验证 谢谢 即使用户已通过身份验证 您仍然可以使用
  • com.sun.xml.ws.message.saaj.SAAJHeader 无法转换为 com.sun.xml.ws.security.opt.impl.outgoing.SecurityHeader

    我正在尝试访问第三方 Web 服务 该服务要求我创建一个传递时间信息 用户名和密码的安全标头 我在网上搜索了可行的示例 并尝试了多种方法 我正在尝试使用 Java 6 中内置的内容来做到这一点 我不确定我做错了什么 从 WSDL 生成 We
  • Unicode(希腊语)字符存储在数据库中,例如“??????”

    数据库中的希腊字符就像问号 我找不到解决办法 我使用 Java Swing 开发了一个应用程序 但是当我在 MySQL 中插入希腊字母时 就像问号一样 我将数据库排序规则更改为 utf8 并将列也更改为 utf8 我的项目编码设置为UTF

随机推荐

  • 在Spring Boot中使用PageHelper实现分页查询

    一 添加PageHelper依赖 首先 我们需要在项目的pom xml文件中添加PageHelper的依赖项 请确保使用最新版本的PageHelper插件
  • HR筛选简历的真相!(据说是来自某公司内部,被外传哦)

    分析简历结构 简历的结构在很大程度上反映了应聘者的组织和沟通能力 结构合理的简历都比较简练 一般不超过两页 通常应聘者为了强调自己近期的工作 书写教育和工作经历时 可以采取从现在到过去的时间排列方式 相关经历常被突出表述 书写简历并没有一定
  • 入站与出站规则

    参考 https zhidao baidu com question 397135594 html 部署一个端口号为80的web程序 结果其他机器访问不到 但是能ping通 当关闭防火墙时 即可访问 但当开启防火墙时又失败 原因在于防火墙的
  • 什么是模式识别,模式识别主要识别什么?

    模式识别诞生于20实际20年代 随着40年代计算机的出现 50年代人工智能的兴起 模式识别在60年代初迅速发展成为一门学科 简单点说 模式识别是根据输入的原始数据对齐进行各种分析判断 从而得到其类别属性 特征判断的过程 为了具备这种能力 人
  • upload-labs 09(配合解析漏洞)

    题目 查看源码 该代码对文件名最后是进行拼接的 可以伪造文件名 通过bp截断上传文件 在文件后添加 进行伪造 如图示 验证文件 文件上传成功 小提示 在前面的某些关卡也存在同样的漏洞 可用此方法通过
  • 基于插值的超分辨率图像重建算法(1)

    基于插值的方法通常提供过于平滑的重建图像 失去部分细节 留下了振铃效应 输出图像灰度剧烈变化处产生的震荡 尤其是高频信息丢失 基于插值的重建方法通常有三类 1 最近邻插值法 2 双线性插值法 3 双三次插值法 1 最邻近插值法 Neares
  • golang - recover 使用笔记

    作用 程序报panic时 会使整个程序挂掉 在实际工作中 报panic的地方可能会非常的多 一旦报panic会导致整个服务挂掉 是非常危险的 golang 引用recover 函数来捕获异常 使得即使报panic 也能继续运行下去 通常写法
  • 2023年春秋杯网络安全联赛春季赛Misc-AK

    sudo CVE 2023 22809 没有vim vi 就用原生编辑器nano EDITOR nano flag sudoedit etc GAMELAB piphack 可以下载任意包 考虑构造恶意的包 让他去下载 直接在setup下写
  • 7-6 逆序输出 (10 分)

    输入n个数 然后把这n个数逆序输出 输入格式 测试数据有多组 处理到文件尾 每组测试数据在一行上首先输入整数n 接着输入n n lt 40 个整数 输出格式 对于每组测试 逆序输出n个数 每两个数据之间留一个空格 每两组测试数据之间留一个空
  • MybatisPlus QueryWrapper的null查询

    查询字段对应 null的值 特殊 isNull QueryWrapper
  • UnicodeDecodeError:gbk codec can’t decode byte 0xff in position 0: illegal multibyte sequence

    在批量处理XML txt 文件时遇到了问题 UnicodeDecodeError gbk codec can t decode byte 0xff in position 0 illegal multibyte sequence 网上有个帖
  • Mysql URL连接参数useSSL、serverTimezone 相关问题

    MySQL 8 0 以下版本 JDBC 驱动名及数据库 URL static final String JDBC DRIVER com mysql jdbc Driver static final String DB URL jdbc my
  • 无向图的DFS算法

    2 无向图的DFS算法 按照教材中的定义方式 完整实现图的DFS算法 给定图数据文件 tinyG txt 能够输出DFS的节点遍历结果 及每个节点的Pre和Post值 和连通分量的个数与节点构成 类名 GraphDFS 博文标题 第四周作业
  • C++ std::pair and std::list \ std::array

    std pair lt 第一个数据类型 第二个数据类型 gt 变量名 例如 std pair
  • leetcode总结:最长公共前缀

    1 Python max 方法返回字符串中最大的字母 Python min 方法返回字符串中最小的字母 2 另外 字符串是可以比较的 故有下面 3 enumerate 函数 用于将一个可遍历的数据对象 如列表 元组或字符串 组合为一个索引序
  • Unity——MVC(很不错的解释应用)

    点击打开链接 First time programmers usually start learning the trade with the classic Hello World program From there bigger an
  • 这就是神经网络 9:深度学习-语义分割-FCN、U-Net、SegNet

    FCN 简介 FCN全称是 Fully Convolutional Networks 也就是全卷积网络 这个网络去掉了全连接层 网络结构里只有卷积 池化和反卷积 操作 本文的FCN特指这个语义分割网络 而非广义的全卷积网络 作者在论文里说
  • 计算机管理启动postgresql失败

    1 选中postgresql右键 属性 2 在属性中的找到 登录 页 本地系统账户
  • C++文件读写操作(自学笔记三)

    C 中对文件的操作的三个大类 写操作 ofstream 读操作 ifstream 读写操作 fstream 要想实现对文件的读写操作 头文件中需要包含 include
  • spring初始化方法的执行顺序以及其原理

    Spring中初始化方法的执行顺序 首先通过一个例子来看其顺序 调用顺序 init2 PostConstruct注解 gt afterPropertiesSet InitializingBean接口 gt init3 init method