@PostConstruct ,InitializingBean接口,init-method属性 三者的概念

news/2024/10/9 4:26:49/

在Spring框架中,在bean被实例化后,有三种方式可以用来执行Bean的初始化逻辑:@PostConstruct注解、实现InitializingBean接口以及使用init-method属性。

@PostConstruct

  • 来源与适用性@PostConstruct是Java EE规范的一部分,但在Spring中也被广泛支持。它可以应用于任何类的方法上,不需要实现特定接口。
  • 使用方式:只需在希望在Bean初始化完成后执行的方法上添加此注解即可。
  • 执行时机:在依赖注入完成后立即执行,但在Bean完全初始化之前(即,Bean可以使用其依赖,但尚未对外暴露)。
  • 灵活性:提供了注解式的简洁语法,易于理解和使用。

InitializingBean接口

  • 来源与适用性:这是Spring框架特有的接口,包含一个方法afterPropertiesSet()
  • 使用方式:需要让Bean类实现InitializingBean接口,并重写afterPropertiesSet()方法来定义初始化逻辑。
  • 执行时机:与@PostConstruct类似,也是在依赖注入完成后,但在Bean完全初始化之前执行。
  • 灵活性:相比注解,这种方式稍微繁琐,需要实现接口,但提供了更多控制权,特别是在不希望依赖Java EE规范的情况下。

init-method属性

  • 来源与适用性:这是Spring框架提供的XML配置方式或@Bean注解的属性,允许直接指定Bean的一个初始化方法。
  • 使用方式:在XML配置中通过init-method="methodName"属性指定,或在使用Java配置时通过@Bean(initMethod = "methodName")指定。
  • 执行时机:同样在依赖注入完成后执行,与前两者时机一致。
  • 灵活性:提供了非侵入式的初始化方法定义方式,特别适合不想在业务逻辑代码中引入特定框架注解或接口的情况。

三者怎么选择?

@PostConstruct更通用,适用于遵循Java EE规范的环境,且语法简洁。现代Spring应用倾向于使用@PostConstruct,因为它更加简洁且不引入额外的耦合。

InitializingBean是Spring特有的,适合不希望使用注解或XML配置的场景。

init-method提供了不改变类结构的配置方式,灵活性较高。

三者的执行顺序

1.@PostConstruct

2.InitializingBean.afterPropertiesSet() 

3.init-method


http://www.ppmy.cn/news/1438562.html

相关文章

CPPTest实例分析(C++ Test)

1 概述 CppTest是一个可移植、功能强大但简单的单元测试框架,用于处理C中的自动化测试。重点在于可用性和可扩展性。支持多种输出格式,并且可以轻松添加新的输出格式。 CppTest下载地址:下载地址1  下载地址2 下面结合实例分析下CppTest如…

智能解决装箱问题:使用优化算法实现高效包装

组合优化问题 组合优化(Combinatorial Optimization,CO)数学优化研究的一个分支。主要关注的是从有限的对象集合中寻找最优解的问题。这个词的由来主要是由“组合”和“优化”两部分构成。“组合”指的是从有限的对象集合中选择一部分的过程…

单机三pxc节点集群,+docker-haproxy2.0负载均衡实现

一.下载 https://www.haproxy.org/download/2.0/src/haproxy-2.0.5.tar.gz 或者在这里下载(下面需要的各个配置文件都有): https://download.csdn.net/download/cyw8998/89170129 二.编写文件,制作docker镜像 1.Dockerfile&a…

运行django

确保app被注册 urls.py中编写url 视图对应关系 命令行启动 python manage.py runserver

【Linux】学习记录_15_POSIX信号量

15 POSIX信号量 15.1 POSIX信号量基本概念 信号量(Semaphore)是一种实现进程/线程间通信的机制,可以实现进程/线程之间同步或临界资源的互斥访问, 常用于协助一组相互竞争的进程/线程来访问临界资源。在多进程/线程系统中&#…

C++ //练习 13.4 假定Point是一个类类型,它有一个public的拷贝构造函数,指出下面程序片段中哪些地方使用了拷贝构造函数:

C Primer(第5版) 练习 13.4 练习 13.4 假定Point是一个类类型,它有一个public的拷贝构造函数,指出下面程序片段中哪些地方使用了拷贝构造函数: Point global; Point foo_bar(Point arg){Point local arg, *heap ne…

06.JAVAEE之线程4

1.定时器 1.1 定时器是什么 定时器也是软件开发中的一个重要组件. 类似于一个 " 闹钟 ". 达到一个设定的时间之后 , 就执行某个指定好的代码. 约定一个时间,时间到达之后,执行某个代码逻辑, 定时器非常常见,尤其是在进行网络通信的时候, 需要有等待的最大时间&…

WPF之Label

Label在wpf中表示控件的文本标签&#xff0c;并提供访问密钥支持。 常用属性: 属性 HorizontalContentAlignment文本水平内容排列VerticalContentAlignment垂直内容排列width宽height高fontsize字体大小fontfamily字体样式fontwidth字体粗细 具体写法 <Label Width"20…