Spring Boot 导入 Bean
最后修改于 2023 年 7 月 21 日
Spring Boot 导入 Bean 教程展示了如何将额外的 Bean 导入 Spring Boot 应用程序的应用程序上下文。
Spring Boot 是一个流行的应用程序框架,用于在 Java、Kotlin 或 Groovy 中创建企业应用程序。
@SpringBootApplication
是一个便捷的注解,它允许在应用程序类上定义自动配置、组件扫描和定义额外的 Bean。
在现代应用程序中,Spring Bean 通常通过组件扫描注册到应用程序上下文中。但也可以使用 @Import
注解或 SpringApplicationBuilder
的 sources
方法来导入 Bean。
Spring Boot 导入 Bean 示例
在下面的应用程序中,我们关闭组件扫描,并使用 @Import
和 sources
注册服务 Bean。
build.gradle ... src ├── main │ ├── java │ │ └── com │ │ └── zetcode │ │ ├── Application.java │ │ └── service │ │ └── TimeService.java │ └── resources └── test └── java
这是 Spring Boot 应用程序的项目结构。
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 的 build.gradle
文件。
com/zetcode/service/TimeService.java
package com.zetcode.service; import org.springframework.stereotype.Service; import java.time.LocalTime; @Service public class TimeService { public LocalTime getTime() { return LocalTime.now(); } }
我们有一个简单的服务 Bean,它返回当前的本地时间。
com/zetcode/Application.java
package com.zetcode; import com.zetcode.service.TimeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @EnableAutoConfiguration @Configuration @Import(value=TimeService.class) public class Application implements CommandLineRunner { public static void main(String[] args) { new SpringApplicationBuilder(Application.class) // .sources(TimeService.class) .build() .run(args); } @Autowired private TimeService timeService; @Override public void run(String... args) throws Exception { System.out.println(timeService.getTime()); } }
我们有意没有使用 @SpringBootApplication
注解,也没有指定 @ComponentScan
注解。为了注册和使用 TimeService
Bean,我们必须导入它。
@EnableAutoConfiguration @Configuration @Import(value=TimeService.class) public class Application implements CommandLineRunner {
我们将 TimeService
Bean 导入应用程序上下文。
new SpringApplicationBuilder(Application.class) // .sources(TimeService.class) .build() .run(args);
导入 Bean 的另一种方法是使用 SpringApplicationBuilder
的 sources
方法。由于我们已经导入了 Bean,因此该行已被注释掉。
@Autowired private TimeService timeService;
现在 Bean 已经注册,我们可以将其注入到字段中。
System.out.println(timeService.getTime());
最后,我们调用 Bean 的 getTime
方法。
$ ./gradlew -q bootRun ... 17:43:10.494434800
我们运行应用程序。
在本文中,我们展示了如何将额外的 Bean 导入应用程序上下文。