面试--springboot基础
1、约定优于配置,理解
-
是一种软件设计的范式,减少开发人员对于配置项的维护,更加聚焦在业务逻辑上
-
基于spring框架开发web项目,只需要做一次配置
springboot starter启动依赖,帮我们管理jar包版本
当前应用依赖spring mvc相关的jar,会自动内置tomcat运行web应用,不需要再单独部署
自动装配机制的实现中国,通过扫描约定路径下的配置文件,实现bean的自动装配
2、自动装配机制的原理
自动把第三方组件的bean装载到IOC容器中,不需要再去写bean的装配配置
启动类上@SpringBootApplication
就可以实现自动装配,真正实现自动装配的注解是@EnableAutoConfiguration
-
引入starter启动依赖组件,这个组件里必须包含
@Configuration
配置类,通过@Bean
声明需要装配到IOC的bean对象 -
这个配置类是放在第三方jar包里,然后通过约定优于配置私下,把这个配置类的全路径放在
classpath:/META-INF/spring.factories
文件中,这样springboot就可以知道第三方jar包里的配置类的位置,这个步骤主要是用到spring里SpringFactoriesLoader
来完成的 -
springboot拿到jar包的配置类后,再通过spring提供的
ImportSelector
接口实现动态加载
启动底层主要是三个注解:
- @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
- @EnableAutoConfiguration:打开自动配置的功能
- @ComponentScan:Spring组件扫描。
3、如何理解starter
Spring Boot 中的 starter 到底是什么 ? - 知乎
starter是启动以来,为何对应的jar包版本依赖,避免一些版本冲突的问题。内部集成了自动装配机制,这个组件会自动集成到spri那个生态下,并且自动装配bean,只需要在在 application.properties
中维护配置就可以了,官方是spring-boot-starter-xxx
开头、
常用的:spring-boot-starter-data-redis、druid-spring-boot-starter
4、如何解决跨域
访问浏览器网页时,只能访问同源的资源,比如协议、域名、端口号不同的资源时存在限制
-
jsonp:动态地创建
<script>
标签,只支持get请求 -
cros:服务器短配置
Access-Control-Allow-Origin
,配置允许哪些域名支持跨域请求@CrossOrigin(origins = "http://localhost:8080")
指定哪些允许跨域继承
WebMvcConfigurer
重写addCorsMappings
设置请求源 -
nginx反向代理
add_header Access-Control-Allow-Origin
add_header Access-Control-Allow-Methods
5. 事物的使用
使用注解@EnableTransactionManagement开启事物之后,然后在Service方法上添加注解@Transactional
6. Async异步调用方法
方法上使用@Async注解,需要在启动类加入@EnableAsync
7. 核心配置文件ootstrap.properties 和application.properties区别
在结合Spring Cloud 时,bootstrap.properties配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。
- boostrap 由父 ApplicationContext 加载的,比applicaton 优先加载,配置在应用程序上下文的引导阶段生效,且 boostrap 里面的属性不能被覆盖;
- application 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置。
8、全局异常处理
注解@RestControllerAdvice,重写全局异常处理方法
9. 无需重新启动服务器重新加载 Spring Boot 上的更改
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>