在每个开发者的流程中,势必都有一个设计一个系统开发生命周期,在每个元件注册先後顺序除了昨日提到的依赖性(@DependOn)注册方法之外,还有今日要提到的方法顺序注册(@Order)方法,这个方法相较昨日提到来得简单,只需配置一个数字来表明优先顺序,即可让Spring Boot在启动时,自动的所有的元件由小到大进行注册,因该数值采用原子int进行操作配置,故最大值仅能配置到2147483647,最小值可配置到-2147483648,也就是说开发者开最大配置到2147483648个元件进行顺序配置,相当绰绰有余的噢!!!再者如何简化所有共通介面的预设方法,我们将提供以下范例搭配原理进行介绍,提供开发者更深入的了解所有流程与正确的运用方法。
排序注册方法中,会由小到大进行排序注册,并且将个元件逐一注册进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);
}
}
根据以上的配置,开发者更加简化与优化自身个开发系统平台中各种元件架构,是一种相当不错的搭配,提供各位开发者作参考。
在Spring框架中,每个所有程序启动皆透过SpringApplication这只类别作为入口,在每个资源跑起来时,会将所有Bean加进列表中,并透过AnnotationAwareOrderCompartor进行取得(@Order)顺序,由於该类别扩展鱼OrderCompartor,故会将所有元件列表放入自身的Compare方法中进行排序,许多读者可能会好奇,如果共用前两天所叙的@Lazy及@DependsOn两项注解会有何种结果,这边告诉各位开发者,Order的优先权在两项注解进行注册之前,故会以Order为主,再以@DependsOn及@Lazy为辅,故优先权为:@Order > @DependsOn > @Lazy,毕竟此项排序优先权再启动时就先开始执行罗,可得知在未开始进行後续的Bean元件注册就已有先行排序,故建议不要将三项注解进行共用,会产生逻辑冲突,各位开发者须注意此项逻辑条件,由图一架构图可得知。
图一、Spring Order 方法流程图
Run test task
gradle test
Run open result html
open ./build/reports/tests/test/index.html
Order register test report
Mind-blowing initial order message & test detail
<<: 电子书阅读器上的浏览器 [Day29] 网页载入性能改善
>>: [Day 14] 用 MLFlow 记录模型实验,就。很。快
昨天把购物车的资料表建好了(表 car)。 今天购物车制作的理想步骤应该是: 按下"加到购...
首先先在StockPrice以外,新增Bid和Ask,还有Lock(多线程读写资料避免打架的工具) ...
嗨嗨!今天来讲一下怎麽设定网站的 favicon!还有用 Next.js 也可以快速设定每个页面用不...
其实我们这样子写的方式, 感觉有点像在呼叫API, 所以我们决定要把它改成放到API, 我们把原本在...
今天西子湾被断网了,所以没时间打太多字,请见谅,有看不懂的留言询问哦! https://jerry-...