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)

相关推荐

  • 游戏加速首选香港轻量云

    技术游戏加速首选香港轻量云由于现在很多海外游戏都锁国区,或者大陆地区没有服务器,因此很多玩家都会利用SOCK5代理来防止锁区或者改善游戏的网络环境,那么自建SOCK5代理有什么推荐方案呢。建议首选香港轻量云规避在线限制

    礼包 2021年12月16日
  • oracle数据库CPU过高问题分析

    技术oracle数据库CPU过高问题分析这篇文章主要讲解了“oracle数据库CPU过高问题分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“oracle数据库CPU过高

    攻略 2021年11月11日
  • 如何解析CSRF漏洞

    技术如何解析CSRF漏洞这篇文章给大家介绍如何解析CSRF漏洞,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。CSRF:跨站请求伪造,伪装成用户身份来执行一些非用户自愿的恶意以及非法操作CSRF和XS

    攻略 2021年12月9日
  • Linux系统中怎么使用TFTP

    技术Linux系统中怎么使用TFTP这篇文章主要讲解了“Linux系统中怎么使用TFTP”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统中怎么使用TFTP”吧

    攻略 2021年11月30日
  • ubuntu中VETH虚拟接口的示例分析

    技术ubuntu中VETH虚拟接口的示例分析这篇文章将为大家详细讲解有关ubuntu中VETH虚拟接口的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。简介virtual eth

    攻略 2021年11月17日
  • 如何用nmap对系统版本和服务版本的探测

    技术如何用nmap对系统版本和服务版本的探测如何用nmap对系统版本和服务版本的探测,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。接下来是关

    攻略 2021年12月9日