本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
Bean的异步加载,SOFABoot主打一个异步
sz199511 · 121浏览 · 发布于2023-07-04 +关注

前言

最近在学习异步编程的过程中,偶然看到Bean的异步加载,之前只用过方法的异步事务、异步回调、异步线程,基本都是针对方法的执行,但是具体涉及到Bean实例的异步加载,还没有在实际开发中应用过,在我的理解Spring boot在项目启动的时候会加载很多bean,比如一些远程配置、数据源,可能会在需要调用的时候,进行使用,如果这个时候在进行加载,是不是就会节约很多资源。

了解Spring的小伙伴应该知道,bean加载避免不了上下文的切换,减少上下文的切换本身就是一种节约CPU资源的方式。

SOFABoot框架

SOFABoot是阿里蚂蚁金服在Spring boot基础上开发的一个升级框架, 可以理解一个中间件,拥有Spring boot没有的类隔离、日志空间隔离的功能,也是最近很火的一个框架,相信在不久的将来会慢慢集成到业务项目中,先来看看它的核心功能通过注解实现Bean的异步加载;

Jar包引入

这边用的是3.18.0版本,引入的时候发现不会和Spring boot,Jar包形成冲突,但是我的Spring-boot.version是2.2.6.RELEASE版本,在启动的时候报错了,初步分析是因为版本太低,与SOFABoot3.0的版本不兼容,需要将Spring-boot.的版本升为3.0以上版本,还需要将jdk版本升为17以上才行;

      <dependency>
            <groupId>com.alipay.sofa</groupId>
            <artifactId>runtime-sofa-boot-starter</artifactId>
            <version>3.18.0</version>
        </dependency>

启动类加载bean

@SpringBootApplication
@EnableFeignClients
@EnableCustomSwagger2
@EnableHystrix
@MapperScan("com.example.system.mapper")
public class LxlxxxSystemApplication {

    public static void main(String[] args) {
        SpringApplication.run(LxlxxxSystemApplication.class, args);
    }


    @Bean(name = "synBean", initMethod = "init")
    public SynBean synBean() {
        return new SynBean();
    }

    @Bean(name = "synBean2", initMethod = "init")
    public SynBean2 synBean2() {
        return new SynBean2();
    }

    @Bean(name = "synBean", initMethod = "init")
    @SofaAsyncInit
    public AsyncBean asyncBean() {
        return new AsyncBean();
    }

    @Bean(name = "synBean2", initMethod = "init")
    @SofaAsyncInit
    public AsyncBean2 asyncBean2() {
        return new AsyncBean2();
    }


}

同步的方式记载两个bean,异步的方式需要加上SofaAsyncInit注解实现异步加载。


E95F9EC1-40F7-4FF6-A6C4-54F8809DF375.png

AsyncInitBeanFactoryPostProcessor 核心类

其核心我理解为,就是通过拦截器将标记为SofaAsyncInit注解的bean放入AsyncTaskExecutor异步线程池里面开启异步任务进行加载,

AsyncInitializeBeanMethodInvoker 主要执行类

4EDB4D2D-0CC1-4675-AF4B-70BC95AABE81.png

这里可以清楚的看到通过拿到注解,获取到方法、方法名、通过Spring的上下文事件监听模式,将Class文件进行反射加载,整个代码还是比较清晰易懂的;有兴趣的小伙伴可以模仿自己写一个,巩固下Spring源码原理;

相关推荐

PHP实现部分字符隐藏

沙雕mars · 1325浏览 · 2019-04-28 09:47:56
Java中ArrayList和LinkedList区别

kenrry1992 · 908浏览 · 2019-05-08 21:14:54
Tomcat 下载及安装配置

manongba · 970浏览 · 2019-05-13 21:03:56
JAVA变量介绍

manongba · 963浏览 · 2019-05-13 21:05:52
什么是SpringBoot

iamitnan · 1086浏览 · 2019-05-14 22:20:36
加载中

0评论

评论
不积跬步无以至千里,不积小流无以成江海!
分类专栏
小鸟云服务器
扫码进入手机网页