[Day - 14] - Spring 优化应用程序元件注册顺序开发与方法

Abstract

在每个开发者的流程中,势必都有一个设计一个系统开发生命周期,在每个元件注册先後顺序除了昨日提到的依赖性(@DependOn)注册方法之外,还有今日要提到的方法顺序注册(@Order)方法,这个方法相较昨日提到来得简单,只需配置一个数字来表明优先顺序,即可让Spring Boot在启动时,自动的所有的元件由小到大进行注册,因该数值采用原子int进行操作配置,故最大值仅能配置到2147483647,最小值可配置到-2147483648,也就是说开发者开最大配置到2147483648个元件进行顺序配置,相当绰绰有余的噢!!!再者如何简化所有共通介面的预设方法,我们将提供以下范例搭配原理进行介绍,提供开发者更深入的了解所有流程与正确的运用方法。

Principle Introduction

排序注册方法中,会由小到大进行排序注册,并且将个元件逐一注册进BeanFactory中,执得注意的是,顺序性注册(@Order)仅适用於元助解元件(@Component)或延伸性元件,如:服务(@Service)、仓储(@Respository)或组态(@Configuration)等注解,但不适用於@Bean注解之上,故仅适用於各种类别上,不适用於各种方法上,此数据采用int原子进行宣告,此原子类型占记忆体空间 4 bytes,故最大可设置到2的31次方并减去1为2,147,483,647,最小可设置到2的负31次方-2,147,483,648,根据这些元件的顺序配置最大可配置到4,294,967,294个元件,那我们亦可在每个元件上配置预设方法,提供所类别做覆盖或沿用,相关范例如下。

配置@Order注册及应用程序读取初始化讯息

@Component("Google")
@Order(55)
public class GoogleIDEServiceImpl implements IDEService , ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("GoogleIDEServiceImpl init.");
    }
    
    ...
    ...
    ...
}

每个继承介面可提供预设方法,提供寻找相关实体物件,default method 是Java 8所倡导出来的,提供所有类别进行供通方法沿用。

public interface IDEService {

    List<IDEMdl> listIDEModels();

    default IDEMdl getIDEMdlById(String id) {
        return this.listIDEModels()
                .stream()
                .filter(ideMdl1 -> ideMdl1.getId().equalsIgnoreCase(id))
                .findAny()
                .orElse(null);

    }

}

根据以上的配置,开发者更加简化与优化自身个开发系统平台中各种元件架构,是一种相当不错的搭配,提供各位开发者作参考。

Structure

在Spring框架中,每个所有程序启动皆透过SpringApplication这只类别作为入口,在每个资源跑起来时,会将所有Bean加进列表中,并透过AnnotationAwareOrderCompartor进行取得(@Order)顺序,由於该类别扩展鱼OrderCompartor,故会将所有元件列表放入自身的Compare方法中进行排序,许多读者可能会好奇,如果共用前两天所叙的@Lazy及@DependsOn两项注解会有何种结果,这边告诉各位开发者,Order的优先权在两项注解进行注册之前,故会以Order为主,再以@DependsOn及@Lazy为辅,故优先权为:@Order > @DependsOn > @Lazy,毕竟此项排序优先权再启动时就先开始执行罗,可得知在未开始进行後续的Bean元件注册就已有先行排序,故建议不要将三项注解进行共用,会产生逻辑冲突,各位开发者须注意此项逻辑条件,由图一架构图可得知。

图一、Spring Order 方法流程图
image

Follow up

Run test task

gradle test

Run open result html

open ./build/reports/tests/test/index.html

Test Report

Order register test report
image

Mind-blowing initial order message & test detail
image

Sample Source

spring-sample-order

Reference Url

tabnine-Order

浅谈Spring @Order注解的使用

浅谈Spring @Order注解的使用


<<:  电子书阅读器上的浏览器 [Day29] 网页载入性能改善

>>:  [Day 14] 用 MLFlow 记录模型实验,就。很。快

第20天 - 来试着做一个简易购物系统(4)购物车卡关了,先确定能新增资料:(

昨天把购物车的资料表建好了(表 car)。 今天购物车制作的理想步骤应该是: 按下"加到购...

[Day22] 网格交易机器人-报价接收

首先先在StockPrice以外,新增Bid和Ask,还有Lock(多线程读写资料避免打架的工具) ...

#27 No-code 之旅 — 客制化 Favicon ~

嗨嗨!今天来讲一下怎麽设定网站的 favicon!还有用 Next.js 也可以快速设定每个页面用不...

[Day 14] 简单的单元测试实作(八)-修改成API来呼叫

其实我们这样子写的方式, 感觉有点像在呼叫API, 所以我们决定要把它改成放到API, 我们把原本在...

Chapter4 - Canvas背景动画(II)就如那轻薄的鸿毛,我心上小船载浮载沉

今天西子湾被断网了,所以没时间打太多字,请见谅,有看不懂的留言询问哦! https://jerry-...