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)

相关推荐

  • 如何在NetBeans Java ME polish环境下开发BlackBerry应用

    技术如何在NetBeans Java ME polish环境下开发BlackBerry应用这期内容当中小编将会给大家带来有关如何在NetBeans Java ME polish环境下开发BlackBerry应用,文章内容

    攻略 2021年10月23日
  • spring的注入依赖set方法吗(spring如何注入类)

    技术Spring中@Value注入复杂类型怎么用这篇文章主要为大家展示了“Spring中@Value注入复杂类型怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Sprin

    攻略 2021年12月16日
  • php接口安全的三个机制是什么

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

    攻略 2021年10月22日
  • 分享Python练手小项目

    技术分享Python练手小项目本篇内容介绍了“分享Python练手小项目”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1

    攻略 2021年10月22日
  • 如何使用iOS实现仿高德首页推拉效果

    技术如何使用iOS实现仿高德首页推拉效果这篇文章主要介绍了如何使用iOS实现仿高德首页推拉效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。上面是实现的效

    攻略 2021年11月12日
  • 如何使用MySQL自动化运维工具goinception

    技术如何使用MySQL自动化运维工具goinception这篇文章主要讲解了“如何使用MySQL自动化运维工具goinception”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究

    攻略 2021年10月22日