Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
-
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
- 详细:SpringBootConfiguration是SpringBoot项目的配置注解,这也是一个组合注解,SpringBootConfiguration注解可以用java代码的形式实现spring中xml配置文件配置的效果,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
实例
@SpringBootConfiguration
public class Config {
@Bean
public Map MyMap(){
Map map = new HashMap();
map.put("website","51gjie");
map.put("type","javaschool");
map.put("age",5);
return map;
}
}
@RestController
@SpringBootApplication
public class App
{
public static void main( String[] args )
{
Map map = (Map) context.getBean("MyMap"); //注意这里直接获取到这个方法bean
int age = (int) map.get("age");
System.out.println("age=="+age);
}
}
SpringBoot项目中推荐使用@SpringBootConfiguration替代@Configuration
-
@ComponentScan:Spring组件扫描。
- 详细:@ComponentScan注解的作用就是根据定义的扫描路径,将扫描路径下边带有@Controller,@Service,@Repository,@Component注解且符合扫描规则的类装配到spring的bean容器中。
-
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项, 例如:
java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。- 详细:当springboot扫描到@EnableAutoConfiguration注解时则会从classpath中搜寻所有的META-INF/spring.factories配置文件,找到文件中的org.springframework.boot.autoconfigure.EnableAutoConfiguration对应的value里的所有xxxConfiguration类(配置类),通过反射(Java Refletion)实例化这些配置类,最后加载到IOC容器中。
@EnableAutoConfiguration实现的关键在于引入了AutoConfigurationImportSelector,其核心逻辑为selectImports方法,借助AutoConfigurationImportSelector,它可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。
SpringBootApplication注解详解与常见SpringBoot注解列表
SpringBoot Starter的工作原理
我个人理解SpringBoot就是由各种Starter组合起来的,我们自己也可以开发Starter
- 在sprinBoot启动时由@SpringBootApplication注解会自动去maven中读取每个starter中的spring.factories文件,该文件里配置了所有需要被创建spring容器中的bean,并且进行自动配置把bean注入SpringContext中 //(SpringContext是Spring的配置文件)
Spring Boot 有哪几种读取配置的方式?
- Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationPropertie注解来绑定变量
什么是 Spring Profiles?
- 在项目的开发中,有些配置文件在开发、测试或者生产等不同环境中可能是不同的,例如数据库连接、redis的配置等等。那我们如何在不同环境中自动实现配置的切换呢?Spring给我们提供了profiles机制给我们提供的就是来回切换配置文件的功能
- Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION中,某些其他 bean 可以加载。假设我们的要求是 Swagger 文档仅适用于 QA 环境,并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot 使得使用配置文件非常简单。
你如何理解 Spring Boot 配置加载顺序?
-
在 Spring Boot 里面,可以使用以下几种方式来加载配置。
- 1.properties文件;
- 2.YAML文件;
- 3.系统环境变量;
- 4.命令行参数;
- 等等……