Spring Boot @Order
最后修改于 2023 年 7 月 21 日
Spring Boot @Order 教程展示了如何使用 @Order 注解排序 Bean。
Spring 是一个流行的 Java 应用程序框架,而 Spring Boot 是 Spring 的一个演进,它有助于轻松创建独立的、生产级的基于 Spring 的应用程序。
@Order
@Order
定义了注解组件的排序顺序。 value
是可选的,表示排序值。值越小,优先级越高。
Spring Boot @Order 示例
以下应用程序对实现 CommandLineRunner
的 Bean 的执行进行排序。
build.gradle ... src ├───main │ ├───java │ │ └───com │ │ └───zetcode │ │ Application.java │ │ MyRunner.java │ │ MyRunner2.java │ └───resources └───test └───java
这是项目结构。
build.gradle
plugins { id 'org.springframework.boot' version '3.1.1' id 'io.spring.dependency-management' version '1.1.0' id 'java' } group = 'com.zetcode' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' }
这是 Gradle 构建文件。
com/zetcode/MyRunner.java
package com.zetcode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @Component @Order(value = 2) public class MyRunner implements CommandLineRunner { private static final Logger logger = LoggerFactory.getLogger(MyRunner.class); @Override public void run(String... args) { logger.info("Running MyRunner"); } }
当应用程序启动时,Bean 启动。使用 @Order
注解,我们为其提供一个优先级。
com/zetcode/MyRunner2.java
package com.zetcode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @Component @Order(value = 1) public class MyRunner2 implements CommandLineRunner { private static final Logger logger = LoggerFactory.getLogger(MyRunner2.class); @Override public void run(String... args) { logger.info("Running MyRunner2"); } }
这是 MyRunner2
。它使用 @Order
设置了更高的优先级,因此它在 MyRunner
之前执行。
com/zetcode/Application.java
package com.zetcode; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Application
是设置 Spring Boot 应用程序的入口点。
$ ./gradlew bootRun ... ... com.zetcode.MyRunner2 : Running MyRunner2 ... com.zetcode.MyRunner : Running MyRunner
我们运行应用程序。
在本文中,我们展示了如何使用 @Order
注解设置 Bean 的执行顺序。