SpringBootApplication注解原理及代码详解
1. Spring Boot介绍
Spring Boot是一个应用于快速创建基于Spring框架的应用程序的工具。它大大简化了Spring应用程序的搭建和开发流程, 十分适合用于微服务开发等快速迭代的场景。
2. SpringBootApplication注解
SpringBootApplication 是重要的注解之一。这个注解主要是用来标记 Spring Boot 启动类的,它整合了三个注解:@Configuration、@EnableAutoConfiguration、@ComponentScan。
2.1 @Configuration注解
指示 Spring IoC 容器应该将带有该注解的类作为一个配置类来处理。
@Configuration
public class MyConfiguration {
// 配置相关内容
}
2.2 @EnableAutoConfiguration注解
开启自动配置。它通过一系列操作,扫描classpath下的所有jar包和项目自身的类,识别出哪些是SpringBoot的可配置类,自动进行配置。
/**
* 如果不想使用@EnableAutoConfiguration注解,在SpringBoot 2.4及以上版本可以使用以下两个注解之一:
*/
//@SpringBootApplication(exclude = {
// DataSourceAutoConfiguration.class,
// DataSourceTransactionManagerAutoConfiguration.class,
// HibernateJpaAutoConfiguration.class
//})
//@SpringBootConfiguration
//@EnableAutoConfiguration
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
2.3 @ComponentScan注解
指示 Spring 扫描程序包(默认为是启动类所在的包及其子包)以查找组件。使用该注解时不指定任何参数的情况下,Spring Boot只会扫描启动类所在的包及其子包,其他的依赖组件如果不在该包下或子包下的话,将无法被扫描到。
@ComponentScan(basePackages = { "com.example" })
@SpringBootApplication
public class SampleApplication {
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
3. SpringBootApplication代码详解
下面通过两个 SpringBootApplication 代码示例,详细解释 Spring Boot 的自动配置原理。
3.1 SpringBootApplication示例1
@SpringBootApplication
public class SampleApplication {
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
上述代码主要包含了@SpringBootApplication注解,其中包含了@ComponentScan注解和@EnableAutoConfiguration注解,用于指示 Spring Boot 开始运行,并自动配置项目。
@SpringBootApplication是一个复合注解,它从三个注解中组合而成,具体如下:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {}
其中,@SpringBootConfiguration是Spring的 Configuration 注解的升级版,使得我们不必在类中显式地使用@Configuration来注解该类为Spring IoC容器的配置类。
3.2 SpringBootApplication示例2
下面就来看一下通过自定义配置文件的方式,自定义 Spring Boot 的一些配置。
application.yml
server:
port: 8081
spring:
profiles:
active: dev
定义了端口号为8081,并设置激活的环境为dev。接下来,定义 MyProperties 类并使用@ConfigurationProperties注解来绑定配置文件中带有“my”前缀的参数:
@Configuration(proxyBeanMethods = false)
@ConfigurationProperties(prefix = "my")
public class MyProperties {
private String name;
private String greeting;
// getter 和 setter
}
然后定义测试用的 Controller:
@RestController
public class MyController {
private final MyProperties properties;
public MyController(MyProperties properties) {
this.properties = properties;
}
@GetMapping("/")
public String hello() {
return properties.getGreeting() + " " + properties.getName() + "!";
}
}
最后,定义一个启动类:
@SpringBootApplication
@EnableConfigurationProperties(MyProperties.class)
public class SampleApplication {
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
可以看到,SampleApplication类除了@SpringBootApplication注解之外,还使用了@EnableConfigurationProperties注解来注入MyProperties类。在配置文件中定义了带有“my”前缀的变量后,就可以启动应用并访问http://localhost:8081/来测试控制器中读取配置的功能。
4. 总结
Spring Boot 通过@SpringBootApplication注解实现自动扫描、自动配置、快速启动、便捷的开发的功能,是一个很好的微服务框架。通过注解的方式,Spring Boot 使得开发人员能够更加便捷地进行项目开发,加快开发速度,减少开发工作量。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot Application注解原理及代码详解 - Python技术站