1、SpringBoot自动装配的原理?
Springboot的入口是SpringbootApplication,该类加了一个注解@SpringbootApplication,它是一个组合注解,其实内部是:
- @SpringBootConfiguration
跟@Configuration一样,用于定义配置类,会将其内部有一个或多个@Bean标注的方法实例加入到Spring容器中。
- @ComponentScan
指定扫描的路径,把符合扫描规则的类加载到Spring容器中。
- @EnableAutoConfiguration
该注解下有一个@Import注解,该注解引入了自动配置选择器,该选择器会自动导入META-INF/spring.factories 里定义的自动配置类。
@Bean和@Component的区别,前者作用在方法上,一般配合@Configuration一起使用,更加灵活;后者只能作用在类上。
2、SpringBoot核心注解是哪几个?
@Configuration
表明该类是一个配置类,一般跟@Bean一起使用,相当于Spring里的一个xml配置文件。此外除了@Bean之外,要想给容器中注册组件还有@Component @Controller @Service @Repository
@Import({类名 .class, 类名.class})
给容器中导入组件
@Conditional
条件注解,当满足某些条件才会导入组件,其下有很多派生类
@ImportResource("classpath:XXXBean.xml")
直接把xml资源导入
@ConfigurationProperties(prefix = "mycar")
用于配置绑定,要使用该功能首先得在.properties文件中写好配置,然后再通过@Component把要绑定的java类加入到容器中。
3、SpringBoot如何解决跨域问题?
1)通过在类或者方法上加注解@CrossOrigin,前者是类下所有方法都可实现跨域,后者是之针对方法;
2)实现WebMvcConfigurer接口中的addCorsMappings()方法来实现
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT")
.allowedHeaders(*)
.maxAge(3600 * 24);
}
}
3)也可以通过CorsFilter组件进行过滤
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}
}
之所以有跨域这个概念是因为浏览器在设计之初为了安全起见规定只要 协议(http/https等)、域名、端口有一个不同就是跨域,反之则为同源策略。
4、Springboot监控Actuator
首先加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
其次在yml中配置好
management:
endpoints:
enabled-by-default: true #暴露所有端点信息
web:
exposure:
include: '*' #以web方式暴露
5、如何维护API文档?
用Swagger2
6、SpringBoot 如何实现热部署 ?
只需要在pom文件下加入devtools依赖就可以了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
7、SpringBoot中如何实现定时任务 ?
1)首先要在SpringbootApplication加上 @EnableScheduling 注解;
2)然后在Service下的方法加上@Scheduled(cron="0/3 * * * * 0-7")注解,其中cron表达式规定了执行周期,时间用空格分开,顺序是:秒 分 时 日 月 周几。
@Service
public class ScheduledService {
/**
* cron表达式:秒 分 时 日 月 周几
*/
@Scheduled(cron = "0/3 * * * * 0-7")
public void helloScheduled(){
System.out.println("定时调度");
}
}
8、Springboot如何打包部署?
首先引入maven-plugin
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
然后IDEA点击右边的package就可以打包了
然后再控制台直接运行jar包就好了
java -jar XXX.jar