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)

相关推荐

  • linux用时统计方法是什么

    技术linux用时统计方法是什么这篇文章主要介绍“linux用时统计方法是什么”,在日常操作中,相信很多人在linux用时统计方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”lin

    攻略 2021年11月23日
  • asmdisk对应的磁盘分区信息是什么

    技术asmdisk对应的磁盘分区信息是什么这篇文章主要介绍了asmdisk对应的磁盘分区信息是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

    攻略 2021年11月12日
  • 如何使用mybatis collection在转化时候报错的问题

    技术如何使用mybatis collection在转化时候报错的问题如何使用mybatis collection在转化时候报错的问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章

    攻略 2021年10月20日
  • Windows10安装MySQL(基于zip方式)

    技术Windows10安装MySQL(基于zip方式) Windows10安装MySQL(基于zip方式)环境
    操作系统:Windows10 家庭中文版(64bit)
    MySQL版本:mysql-5.7

    礼包 2021年12月21日
  • 毛线鞋,3岁小孩毛线棉鞋怎么织

    技术毛线鞋,3岁小孩毛线棉鞋怎么织你好毛线鞋:很高兴回答“3岁小孩毛线棉鞋怎么织”这个问题。1.准备工具/原料:棒针、毛线。2、方法/步骤:起针30针,双色线交替编织20行.织21行的时候,鞋口留5针不织,从织22行开始

    生活 2021年10月31日
  • 没有sa密码无法集成windows身份验证登录的解决方法

    技术没有sa密码无法集成windows身份验证登录的解决方法今天就跟大家聊聊有关没有sa密码无法集成windows身份验证登录的解决方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这

    攻略 2021年12月1日