欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

@PostConstruct在项目启动时被执行两次或多次的原因及分析

时间:2022-03-26 09:01:19|栏目:JAVA代码|点击:

@PostConstruct项目启动时被执行两次或多次

原因

是因为文件对@PostConstruct所在类扫描了两次!

首先排查,带有扫描包配置(context:component-scan)的同一spring文件,是否在web.xml配置中,初始化就执行的那种配置(比如context-param,init-param),被重复的配置了两遍。

然后在排查,web.xml中配置了初始化配置的多个spring文件是否都扫描了@PostConstruct所在类的所在包!常见SpringMVC文件的扫描路径中也包含了@PostConstruct所在类的所在包。

@PostConstruct执行顺序

最近看到@PostConstruct这个注解,思考一个问题,这个注释是修饰初始化之后需要执行的方法,那么@PostConstruct和@Autowired、构造函数的执行顺序是什么呢?

写了段代码验证一下

@Service
public class BeanA {
    @Autowired
    private BeanB beanB;
    public BeanA() {
        System.out.println("这是Bean A 的构造方法");
    }
    @PostConstruct
    private void init() {
        System.out.println("这是BeanA的 init 方法");
        beanB.testB();
    }
}
@Service
public class BeanB {
    @PostConstruct
    private void init() {
        System.out.println("这是BeanB 的init 方法");
    }
    public BeanB() {
        System.out.println("这是Bean B的 构造方法");
    }
    void testB() {
        System.out.println("这是Bean B 的 testB 方法");
    }
}

启动后输出:

这是Bean A 的构造方法
这是Bean B的 构造方法
这是BeanB 的init 方法
这是BeanA的 init 方法
这是Bean B 的 testB 方法

所以得到结论: 构造方法 > @Autowired > @PostConstruct

上一篇:Java(enum)枚举用法详解

栏    目:JAVA代码

下一篇:java唯一字符串ID生成方案详解

本文标题:@PostConstruct在项目启动时被执行两次或多次的原因及分析

本文地址:http://www.codeinn.net/misctech/197275.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有