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

网友投稿 975 2022-10-07


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

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

原因

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

首先排查,带有扫描包qHrfOqU配置(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 的构造方法");

}

@Posthttp://Construct

private void init() {

System.out.println("这是BeanA的 init 方法");

beanB.testB();

}

}

@Service

public class BeanB {

@PostConstruct

private void init() {

System.out.println("这是BeanB 的init 方法");

http:// }

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:命令执行总结(年终总结执行命令方面)
下一篇:MAC关闭SIP:system integrity protection is on, some f(mac关闭sip)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~