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)

相关推荐

  • SQL查询中什么时候需要使用表别名

    技术SQL查询中什么时候需要使用表别名这篇文章主要介绍SQL查询中什么时候需要使用表别名,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SQL查询中什么时候需要使用表别名?1、 表名很长时selec

    攻略 2021年12月4日
  • 长发发型扎法100种图片,有什么好看的编发值得推荐么

    技术长发发型扎法100种图片,有什么好看的编发值得推荐么临时被邀请参加聚会,再去做美发是肯定来不及了,又不想顶着乱糟糟的头发参加聚会,该怎么办呢?今天我就教大家一款能够简易俗称的盘发,优雅又自然,不会显得太过隆重,简单搭

    生活 2021年10月31日
  • java基础知识回顾之javaIO类--RandomAccessFile类

    技术java基础知识回顾之javaIO类--RandomAccessFile类 java基础知识回顾之javaIO类--RandomAccessFile类java.io类 RandomAccessFil

    礼包 2021年12月22日
  • 如何利用Windows系统字体来创建恶意软件

    技术如何利用Windows系统字体来创建恶意软件这篇文章将为大家详细讲解有关如何利用Windows系统字体来创建恶意软件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。步骤在大多数情况下

    攻略 2021年11月18日
  • Django组件-cookie与session

    技术Django组件-cookie与session Django组件-cookie与sessionDjango组件-cookie与session
    会话跟踪技术
    1 什么是会话跟踪技术
    我们需要先了解

    礼包 2021年12月13日
  • 硫燃烧的化学方程式,硫燃烧,的化学方程式是什么

    技术硫燃烧的化学方程式,硫燃烧,的化学方程式是什么S+O2=SO2 (反应条件:点燃)。发出蓝紫色的火焰, 生成了带有刺激性气味的气体硫燃烧的化学方程式,二氧化硫, 并放出热量。硫(sulfur)是一种非金属元素,化学符

    生活 2021年10月26日