结论:

  1. /**
  2. * step1:执行构造函数
  3. * step2:执行使用@PostConstruct注解修饰的方法【如果有多个,则执行顺序不确定】
  4. * step3:执行@Bean注解中initMethod指定的方法
  5. */
示例代码:
  1. @Slf4j
  2. public class InitBean {
  3.  
  4. public InitBean() {
  5. log.info("Step1:begin to execute Constructor Function");
  6. }
  7.  
  8. public void initMethod() {
  9. log.info("Step3:begin to execute initMethod");
  10. }
  11.  
  12. @PostConstruct
  13. public void postConstructMethod1() {
  14. log.info("Step2:begin to execute postConstructMethod1 with @PostConstruct");
  15. }
  16.  
  17. @PostConstruct
  18. public void postConstructMethod2() {
  19. log.info("Step2:begin to execute postConstructMethod2 with @PostConstruct");
  20. }
  21.  
  22. }

Java Config方式进行Bean的初始化:

  1. @Configuration
  2. public class InitBeanConfig {
  3.  
  4. @Bean(initMethod = "initMethod")
  5. public InitBean initBean() {
  6. return new InitBean();
  7. }
  8.  
  9. }
测试用例:
  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @SpringBootTest(classes = InitBeanConfig.class)
  3. public class InitBeanConfigTest {
  4.  
  5. @Test
  6. public void givenBean_WhenInit_thenFirstConstructorFunction_SecondPostConstructAnna_ThirdInitMethod() {
  7. /**
  8. * step1:执行构造函数
  9. * step2:执行使用@PostConstruct注解修饰的方法
  10. * step3:执行@Bean注解中initMethod指定的方法
  11. */
  12. }
  13.  
  14. }
执行结果:
  1. 2019-01-06 22:16:03.362 INFO 21944 --- [main] c.t.learning.init.spring.InitBean : Step1:begin to execute Constructor Function
  2. 2019-01-06 22:16:03.377 INFO 21944 --- [main] c.t.learning.init.spring.InitBean : Step2:begin to execute postConstructMethod1 with @PostConstruct
  3. 2019-01-06 22:16:03.378 INFO 21944 --- [main] c.t.learning.init.spring.InitBean : Step2:begin to execute postConstructMethod2 with @PostConstruct
  4. 2019-01-06 22:16:03.378 INFO 21944 --- [main] c.t.learning.init.spring.InitBean : Step3:begin to execute initMethod
  5. 2019-01-06 22:16:03.461 INFO 21944 --- [main] c.t.l.init.spring.InitBeanConfigTest: Started InitBeanConfigTest in 3.548 seconds (JVM running for 5.781)

温馨提示: 如果存在多个使用注解@PostConstruct修饰的方法,则这些方法执行顺序不确定

代码:
https://github.com/helloworldtang/spring-boot-cookbook/blob/v1.0.2-thymeleaf/learning-demo/src/main/java/com/tangcheng/learning/init/spring/InitBean.java

哪个先执行:@PostConstruct和@Bean的initMethod?的更多相关文章

  1. 【Java】利用反射执行Spring容器Bean指定的方法,支持多种参数自动调用

    目录 使用情景 目的 实现方式 前提: 思路 核心类 测试方法 源码分享 使用情景 将定时任务录入数据库(这样做的好处是定时任务可视化,也可以动态修改各个任务的执行时间),通过反射执行对应的方法: 配 ...

  2. spring bean中构造函数,afterPropertiesSet和init-method的执行顺序

    http://blog.csdn.net/super_ccc/article/details/50728529 1.xml文件 <bean id="aaa" class=&q ...

  3. Spring InitializingBean init-method @PostConstruct 执行顺序

    Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下三种:   通过实现 Initializing ...

  4. Spring Bean初始化之后执行指定方法

    转: Spring Bean初始化之后执行指定方法 2017年07月31日 15:59:33 vircens 阅读数:24807   Spring Bean初始化之后执行指定方法 在运用Spring进 ...

  5. Spring生命周期 Constructor > @PostConstruct > InitializingBean > init-method

    项目中用到了 afterPropertiesSet: 于是具体的查了一下到底afterPropertiesSet到底是什么时候执行的.为什么一定要实现 InitializingBean; **/ @C ...

  6. spring初始化bean时执行某些方法完成特定的初始化操作

    在项目中经常会在容器启动时,完成特定的初始化操作,如资源文件的加载等. 一 实现的方式有三种: 1.使用@PostConstruct注解,该注解作用于void方法上 2.在配置文件中配置init-me ...

  7. Spring学习(十二)-----Spring Bean init-method 和 destroy-method实例

    实现 初始化方法和销毁方法3种方式: 实现标识接口 InitializingBean,DisposableBean(不推荐使用,耦合性太高) 设置bean属性 Init-method destroy- ...

  8. 003-Spring4 扩展分析-spring类初始化@PostConstruct > InitializingBean > init-method、ApplicationContext、BeanPostProcessor、BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor

    一.spring类初始化@PostConstruct > InitializingBean > init-method InitializingBean接口为bean提供了初始化方法的方式 ...

  9. @PostConstruct - 静态方法调用IOC容器Bean对象

    需求:工具类里面引用IOC容器Bean,强迫症患者在调用工具类时喜欢用静态方法的方式而非注入的方式去调用,但是spring 不支持注解注入静态成员变量. 静态变量/类变量不是对象的属性,而是一个类的属 ...

随机推荐

  1. Checkpoint--相关问题

    Checkpoint是实例级别还是数据库级别? 答:数据库级别,在SQL Server关闭时,会对所有数据库逐一提交checkpoint 测试代码 USE DB0002 GO CHECKPOINT G ...

  2. OPC测试常用的OPCClient和OPCServer软件推荐

    各位在进行OPC通讯时,常会遇到两种情况: 1)使用一个OPCClient在同一台计算机上连接远程计算机上的多个OPCServer时,发现某个OPCServer是通畅的,但其他的OPCServer却无 ...

  3. 《ASP.NET MVC 5 破境之道》:第一境 ASP.Net MVC5项目初探 — 第一节:运行第一个MVC5项目

    第一境 ASP.Net MVC5项目初探 — 第一节:运行第一个MVC5项目 创建一个MVC项目,是很容易的,大部分工作,VS都帮我们完成了.只需要按照如下步骤按部就班就可以了. 打开VS2017,选 ...

  4. C++的访问关系

    1.C++的访问关系

  5. 用redis统计大量用户的登陆情况[只判断是否活跃]

    有这样的一个场景需求:有上亿的用户,要统计这批用户的登陆情况,例如一周连续登陆,连续三天是是否登陆,一周活跃天数等用户 存在的挑战 数据如何尽可能用小的空间存储 如何能快速获取指定的数据 如果使用文件 ...

  6. SpringMVC 上传文件and过滤器

    SpringMVC提供了一个MultipartResolver接口用来实现文件上传,并使用Commons FileUpload技术实现了一个该接口的实现类CommonsMultipartResolve ...

  7. Flask从入门到精通之Jinja2模板引擎

    我们使用一个简单的例子切入到Jinja2模板引擎,形式最简单的Jinja2模板引擎就是一个包含响应文本的文件,实例如下: <h1>Hello World!</h1> 最简单的包 ...

  8. SecureCRT连接Ubuntu,centos失败,长时间的重新连接,连接不了解决办法

    Ubuntu,centos默认未安装ssh远程加密连接服务.使用命令,安装即可. 0.sudo apt-get install openssh-server openssh-client 1.rpm ...

  9. centos 6.8 解决ibus输入法不正常显示的问题

    今天发现 ibus输入法打字时不正常显示,如下图

  10. Storm累计求和Demo并且在集群上运行

    打成jar包放在主节点上去运行. import java.util.Map; import backtype.storm.Config; import backtype.storm.StormSubm ...