1、SpringBoot自动化配置的实现原理?
- 在引导类的springbootApplication里面有一个有@EnableAutoConfiguration注解
- 在@EnableAutoConfiguration注解里面有一个@Import(AutoConfigurationImportSelector.class)
- AutoConfigurationImportSelector类里面有一个selectImports(AnnotationMetadata annotationMetadata)
- selectImports(AnnotationMetadata annotationMetadata)里面有一个getAutoConfigurationEntry(annotationMetadata)方法
- getAutoConfigurationEntry(AnnotationMetadata annotationMetadata)方法里面有一个getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes)方法
- getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes)方法里面有一个断言
- Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you " + “are using a custom packaging, make sure that file is correct.”);
断言如果这个文件META-INF/spring.factories就报错,说明会自动加载这个配置文件
- 但是并不是所有的bean都会被初始化,在配置类中使用Condition来加载满足条件的bean
3、在Maven项目中如何排除一个jar包?
- 打开maven依赖版图,找到需要排除的类右键排除
- 在pom.xml里面的jar包使用exclusions标签排除jar
4、SpringBoot导入其它包的3种方式?
第一种
- 在pom.xml文件中导入其他模块的maven依赖
- 那个模块的配置类上加上@Configuration
- 在需要用的模板的引导类上加上@ComponentScan(“其他模板的配置类”)
第二种
- 使用@Import(需要导入的模块的配置类字节码文件)
第三种
- 加@EnableUser注解
5、CommandLineRunner和ApplicationRunner的区别是什么?
- 他们实现类的run方法参数不同
- 如果不配置@Order会默认执行ApplicationRunner
6、SpringBoot内置了那些常用条件注解?作用是?(至少8个)
- @ConditionalOnBean:仅在当前上下文中存在某个bean时,才会实例化这个Bean
- @ConditionalOnClass:某个class位于类路径上,才会实例化这个Bean
- @ConditionalOnMissingClass:某个class在类路径上不存在的时候,才会实例化这个Bean
- @ConfigurationProperties:将配置文件中的参数映射成一个对象,通过prefix来设定前缀
- @SpringBootApplication:自配配置
- @SpringBootTest:注解进行单元测试
- @ConditionalOnWebApplication:这是一个Web应用程序
- @Inject:JSR-330提供的注解
- @EnableConfigurationProperties(“自定义配置类的字节码文件”)自动加载自定义的配置类
7、SpringBoot项目打包成可独立运行的jar包步骤是?
- maven配置打包插件
- maven- >packege
- 找到jar包所在路径
- 打开powershell框口
- 输入java -jar 文件名
8、SpringBoot项目打包成Tomcat可运行的war包步骤是?
- 在项目的pom.xml配置打包方式
<packaging>war</packaging>
- maven- >packege
- 找到war包所在路径
- 复制到tomcat webapp目录下
- 打开tomcat运行
- 输入tomcatwebapp下的war解压后的访问路径
9、SpringBoot自定义stater的步骤是?
- 定义一个配置模块和一个依赖配置的模块
- 配置模板自定义配置类和实体类
- 在META-INF下创建spring.facotories配置EnableAutoConfiguration对上自定义的配置类的全路径类名
- 在springboot模块pom.xml导入依赖配置模板的maven依赖
10、RequestMapping 和 GetMapping 的不同之处在哪里?
-
@RequestMapping可以指定GET、POST请求方式
-
@GetMapping等价于@RequestMapping的GET请求方式
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented @RequestMapping(method = RequestMethod.GET) public @interface GetMapping { }
-
在限定使用get请求时使用@GetMapping更加简洁方便
-
可读性更强
11、SpringBoot学习过程中,你收获的注解有那些?作用是?(至少5个)
- @SpringBootApplication:里面有@EnableAutoConfiguration和@ComponentScan自动配置
- @EnableAutoConfiguration:自动配置spring.factories文件的属性
- @ConfigurationProperties:用于读取类和配置文件的带前缀的属性
- @EnableUser:导入其他模块的类
- @ConditionalOnClass:作用在类上能够获取到这个类的字节码文件,才会实例化这个Bean
12、在SpringBoot中导入redis之后,项目启动会自动初始化redis相关实例,那么如果不想在启动时自动初始化且项目也包含redis包,怎么办?
- 在@springbootApplication注解内添加(exclude = {排除不需要自动初始化的包}
- 使用@ComponentScan的@excludeFilters属性用来排除不像扫描的bean
13、在SpringBoot中,如何监听项目启动完成事件?
自定义类MySpringApplicationRunListener实现SpringApplicationRunListener接口重写running(ConfigurableApplicationContext context)方法加载时机在项目启动完成时。
14、Actuator是什么?使用它能够查看应用的那些信息?
是springboot自带的监控功能
请求方式 | 请求路径 | 描述 | 鉴权 |
---|---|---|---|
GET | /autoconfig | 自动配置的使用情况 | true |
GET | /beans | 所有springboot 的beans | true |
GET | /dump | 线程栈 | true |
GET | /env | 所有环境变量 | true |
GET | /health | 查看健康指标 | false |
GET | /info | 查看应用信息 | false |
GET | /trace | 查看基本追踪信息 | true |
POST | /shotdown | 允许以优雅的方式关闭 | true |