SpringBoot中的Bean初始化方法是什么

技术SpringBoot中的Bean初始化方法是什么本篇内容介绍了“SpringBoot中的Bean初始化方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这

本文介绍了关于“什么是SpringBoot中的Bean初始化方法”的知识。很多人在实际办案过程中都会遇到这样的困难。接下来,让边肖带领大家学习如何应对这些情况!希望大家认真阅读,学点东西!

00-1010使用注释:@PostConstruct

效果:指定的操作在Bean初始化之后执行(在构造函数和@Autowired之后)。它通常用于延迟施工方法中的动作。

注意:Bean初始化的执行顺序:构造函数-@Autowired-@PostConstruct

注解说明

代码示例

@组件

publicclassPostConstructTest1{

@自动连线

post constructtest2postconstructettest2;

public post constructtest1(){ 0

//post constructtest 2 . hello();

}

@PostConstruct

public void init(){ 0

//someinitfunction

}

}在一个Bean的初始化操作中,有时会遇到调用其他Bean时出现空指针的错误。此时,您可以将调用另一个Bean的方法的操作放入由@PostConstruct注释的方法中,并延迟其执行。

注解示例

@组件

publicclassPostConstructTest1{

@自动连线

post constructtest2postconstructettest2;

public post constructtest1(){ 0

post constructtest 2 . hello();

}

} @组件

publicclassPostConstructTest2{

public void hello(){ 0

System.out.println('hello,iamPostConstructTest2 ');

}

}SpringBoot中的Bean初始化方法是什么

错误示例

@组件

publicclassPostConstructTest1{

@Autowir

ed
        PostConstructTest2 postConstructTest2;
        public PostConstructTest1() {
            postConstructTest2.hello();
        }
    }

@Component
public class PostConstructTest1 {
    @Autowired
    PostConstructTest2 postConstructTest2;
    public PostConstructTest1() {
//        postConstructTest2.hello();
    }
    @PostConstruct
    public void init() {
        postConstructTest2.hello();
    }
}

SpringBoot中的Bean初始化方法是什么

SpringBoot @PostConstruct虽好,也要慎用

做过SpringBoot开发的话,肯定对@PostConstruct比较熟悉。在一个Bean组件中,标记了@PostConstruct的方法会在Bean构造完成后自动执行方法的逻辑。

1 问题的产生

先说下SpringBoot中Bean的加载过程,简单点说就是SpringBoot会把标记了Bean相关注解(例如@Component、@Service、@Repository等)的类或接口自动初始化全局的单一实例,如果标记了初始化顺序会按照用户标记的顺序,否则按照默认顺序初始化。在初始化的过程中,执行完一个Bean的构造方法后会执行该Bean的@PostConstruct方法(如果有),然后初始化下一个Bean。

那么: 如果@PostConstruct方法内的逻辑处理时间较长,就会增加SpringBoot应用初始化Bean的时间,进而增加应用启动的时间。因为只有在Bean初始化完成后,SpringBoot应用才会打开端口提供服务,所以在此之前,应用不可访问。

2 案例模拟

为了模拟上面说的情况,在SpringBoot项目中建两个组件类ComponentOne和ComponentTwo。耗时的初始化逻辑放在ComponentOne中,并设置ComponentOne的初始化顺序在ComponentTwo之前。完整代码如下:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class ComponentOne {
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    public ComponentOne() {
        this.logger.info("ComponentOne 初始化完成");
    }
    @PostConstruct
    public void init() {
        this.logger.info("ComponentOne 模拟耗时逻辑开始");
        try {
        	//这里休眠5秒模拟耗时逻辑
            Thread.sleep(1000 * 5);
        } catch (InterruptedException e) {
            logger.info("模拟逻辑耗时失败", e);
        }
        this.logger.info("ComponentOne 模拟耗时逻辑完成");
    }
}
@Component
@Order(Ordered.HIGHEST_PRECEDENCE + 1)
public class ComponentTwo {
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    public ComponentTwo() {
        this.logger.info("ComponentTwo 初始化完成");
    }
    @PostConstruct
    public void init() {
        this.logger.info("ComponentTwo 初始化完成后处理");
    }
}

启动应用,初始化部分日志如下:

SpringBoot中的Bean初始化方法是什么

“SpringBoot中的Bean初始化方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/124800.html

(0)

相关推荐

  • ibatis映射需要字段一样多吗(ibatis如何映射到dao层)

    技术如何分析iBATIS动态映射这期内容当中小编将会给大家带来有关如何分析iBATIS动态映射,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。iBATIS动态映射都是用在复杂查询过程中,

    攻略 2021年12月19日
  • 如何将eclipse项目导入myeclipse(可以同时安装eclipse和myeclipse)

    技术如何进行MyEclipse6.5+Eclipse3.4的中文问题浅析今天就跟大家聊聊有关如何进行MyEclipse6.5+Eclipse3.4的中文问题浅析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了

    攻略 2021年12月18日
  • 互联网中元宇宙到底是什么东西

    技术互联网中元宇宙到底是什么东西这篇文章将为大家详细讲解有关互联网中元宇宙到底是什么东西,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 元宇宙也称为形上宇宙

    攻略 2021年11月2日
  • 条条大路通罗马下一句,条条大路通罗马中国版名言

    技术条条大路通罗马下一句,条条大路通罗马中国版名言大道是前人修好的条条大路通罗马下一句,小路需要自己去走,我不喜欢品尝别人的胜利果实,却喜欢独僻蹊径去闯出自己的一条小路。2.独自漫步在小巷,雪白的路灯洒着醒目的光,灰淡的

    生活 2021年10月22日
  • 如何使用Sqlite回收查看对话框添加、删除和检查数据

    技术如何使用Sqlite+RecyclerView+Dialog对数据进行增删改查小编给大家分享一下如何使用Sqlite+RecyclerView+Dialog对数据进行增删改查,希望大家阅读完这篇文章之后都有所收获,下

    攻略 2021年12月18日
  • ORA-00313 ORA-00312 redo日志报错怎么处理

    技术ORA-00313 ORA-00312 redo日志报错怎么处理小编给大家分享一下ORA-00313 ORA-00312 redo日志报错怎么处理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家

    攻略 2021年11月17日