目录

1. Spring Boot 自动配置原理是什么?

2. SpringBoot配置-profile

3. SpringBoot中有哪些常用注解

4. Spring Boot、Spring MVC 和 Spring 有什么区别?

5. springboot的核心功能与使用优点?

6. SpringBoot starter 作用在什么地方?

7. SpringBoot的 Actuator 是做什么的?

8. Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

9. Spring Boot 的配置文件有哪几种格式?它们有什么区别?

10. 开启 Spring Boot 特性有哪几种方式?

11. Spring Boot 自动配置原理是什么?

12. Spring Boot 的目录结构是怎样的?

13. springboot配置监听器、过滤器和拦截器

14. 拦截器过滤器的区别

15. Spring Boot 中如何解决跨域问题 ?


关注我们,更多技术干货:

2000多G的计算机各行业电子资源分享(持续更新)

2020年微信小程序全栈项目之喵喵交友【附课件和源码】

Spring Boot开发小而美的个人博客【附课件和源码】

Java微服务实战296集大型视频-谷粒商城【附代码和课件】

Java开发微服务畅购商城实战【全357集大项目】-附代码和课件

最全最详细数据结构与算法视频-【附课件和源码】

2021年JAVA 精心整理的常见面试题-附详细答案

https://mikejun.blog.csdn.net/article/details/114488339

2021年- 精心整理的 SpringMVC 常见面试题-【附详细答案】

https://mikejun.blog.csdn.net/article/details/114992529

2021年JAVA 面试题之--数据结构篇【附详细答案】

https://mikejun.blog.csdn.net/article/details/114647742

精心整理的计算机各类别的电子书籍【超全】

https://mikejun.blog.csdn.net/article/details/115442555

三天刷完《剑指OFFER编程题》--Java版本实现(第一天)

https://mikejun.blog.csdn.net/article/details/106996017

三天刷完《剑指OFFER编程题》--Java版本实现(第二天)

https://mikejun.blog.csdn.net/article/details/108098502

三天刷完《剑指OFFER编程题》--Java版本实现(第三天)

https://mikejun.blog.csdn.net/article/details/108253489

1. Spring Boot 自动配置原理是什么?

  • 在springboot的启动类中使用了注解@SpringBootApplication注解,里面的@EnableAutoConfiguration注解是自动配置的核心,注解内部使用@Import(AutoConfigurationImportSelector.class)(class文件用来哪些加载配置类)注解来加载配置类,并不是所有的bean都会被加载,在配置类或bean中使用@Condition来加载满足条件的bean。
  • @EnableAutoConfiguration 给容器导入META-INF/spring.factories 里定义的自动配置类,筛选有效的自动配置类。每一个自动配置类结合对应的 xxxProperties.java 读取配置文件进行自动配置功能

2. SpringBoot配置-profile

  • profile是用来完成不同环境下,配置动态切换功能的
  • profile配置方式
    多profile文件方式:提供多个配置文件,每个代表一种环境。
    application-dev.properties/yml 开发环境
    application-test.properties/yml 测试环境
    application-pro.properties/yml 生产环境
  • profile激活方式
    配置文件:spring.profiles.active=dev

3. SpringBoot中有哪些常用注解

在使用SpringBoot的过程中,几乎没有了XML配置,采用注解+JavaConfig方式开发,这样做的好处是:

  1. 采用纯java代码,不在需要配置繁杂的xml文件
  2. 在配置中也可享受面向对象带来的好处
  3. 类型安全对重构可以提供良好的支持
  4. 减少复杂配置文件的同时亦能享受到springIoC容器提供的功能

@SpringBootApplication

这个注解很常见了,每次在启动SpringBoot项目的时候,都会见到它,它作用在类上,标识该类为SpringBoot项目启动类。
并且让SpringBoot自动给程序进行必要的配置,等同于@Configuration、@EnableAutoConfiguration、@ComponentScan这三个注解。

@Configuration

  1. 相当于传统Spring的xml配置文件。
  2. 如果第三方库需要用到xml文件,建议通过@Configuration类作为项目的配置主类,可以使用@ImportResource注解加载xml配置文件。

@EnableAutoConfiguration 自动配置。

  1. SpringBoot自动配置(auto-configuration),尝试根据你添加的启动器(starter)自动配置你的SpringBoot应用。
  2. 你可以将@EnableAutoConfiguration注解或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。
  3. 如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。

@ComponentScan

  1. 如果某个类加上@ComponentScan注解,则该类会自动发现扫描组件。
  2. 也就是说,如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。
  3. 我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。如果没有配置的话,SpringBoot会扫描启动类所在包下以及子包下的使用了@Component、@Controller、@Service、@Repository等注解的类。

@Controller

  1. @Controller注解用于定义控制器类,在SpringBoot中由控制器负责将用户发来的URL请求转发到对应的服务接口(Controller层)。
  2. 一般这个注解用在类上,控制器方法需要加上@RequestMapping注解。

@ResponseBody

  1. 如果控制器方法加上@ResponseBody注解,该方法的返回结果将直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。
  2. 在使用@RequestMapping后,返回值通常解析为跳转路径,加上@esponsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。
  3. 比如异步获取json数据,加上@Responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。

@RestController

  1. @RestController注解是@Controller和@ResponseBody的合集。
  2. 使用在类上,表示该类是控制器,并且类中所有控制器方法的返回值直接填入HTTP响应体中,是RESTful风格的控制器,控制器方法返回JSON数据。

@RequestMapping

提供路由信息,负责URL到Controller中的具体方法的映射。

@Import

用来导入其他配置类(加了@Configuration注解的类)。

@ImportResource

用来加载xml配置文件。

@PathVariable

获取URL上的参数(Restful风格接口)。

@Service

一般用于修饰service层的组件

@Repository

使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

@Bean

用@Bean标注方法等价于XML中配置的bean,意思是产生一个bean,并交给SpringBoot管理。

@Value

注入SpringBoot中的配置文件——application.properties配置的属性的值。

@Inject

等价于默认的@Autowired,只是没有required属性。

@Component

泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@AutoWired

自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。

@Qualifier

当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者。

@Resource(name=”name”,type=”type”)

没有括号内内容的话,默认byName。与@Autowired干类似的事。

@JsonBackReference

解决嵌套外链问题。

@RepositoryRestResourcepublic

配合spring-boot-starter-data-rest使用。

全局异常注解

@ControllerAdvice

包含@Component,可以被扫描到。统一处理异常。

@ExceptionHandler(Exception.class)

用在方法上面表示遇到这个异常就执行以下方法。

JPA注解
JPA是ORM思想的规范接口,存在两个核心:

  1. 建立表与实体类的映射。
  2. 建立表字段与实体类属性映射,操作实体类就是操作表。

Hibernate框架作为JPA的实现者之一。

@Entity&@Table(name="表名")

@Entity注解表明这是一个实体类。
@Table(name="表名")映射一张表,但是如果表名和实体类名相同的话,@Table可以省略。

@MappedSuperClass

用在确定是父类的entity上。父类的属性子类可以继承。

@NoRepositoryBean

一般用作父类的repository,有这个注解,SpringBoot不会去实例化该repository。

@Column

建立表字段与实体类属性映射,如果字段名与列名相同,则可以省略。

@Id

表示该属性为主键。

@Transient

  1. 表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。
  2. 如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。

@Basic

@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载方式

@GeneratedValue

@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”)表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq。

@SequenceGeneretor

@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1):name为sequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致。

@JsonIgnore

作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。

@OneToOne、@OneToMany、@ManyToOne

对应多表之间的一对一,一对多,多对一关系。

4. Spring Boot、Spring MVC 和 Spring 有什么区别?

  • Spring
    Spring最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。
    当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。
  • Spring MVC
    Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。
  • SpringBoot
    Spring 和 SpringMVC 的问题在于需要配置大量的参数。
    Spring Boot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。

5. springboot的核心功能与使用优点?

  • 核心功能:
    springboot项目为独立运行的spring项目,java -jar xx.jar即可运行.
    内嵌servlet容器(可以选择内嵌: tomcat ,jetty等服务器.).
    提供了starter的pom 配置 简化了 maven的配置.
    自动配置spring容器中的bean.当不满足实际开发场景,可自定义bean的自动化配置.
    准生产的应用监控(基于: ssh , http , telnet 对服务器运行的项目进行监控.).
    springboot无需做出xml配置,也不是通过代码生成来实现(通过条件注解.).
  • 使用优点:
    快速搭建项目,
    与主流框架集成无需配置集成.
    内嵌服务容器.
    具有应用监控.
    开发部署方便,后期与云计算平台集成方便.

6. SpringBoot starter 作用在什么地方?

  • 依赖管理是所有项目中至关重要的一部分。当一个项目变得相当复杂,管理依赖会成为一个噩梦,因为当中涉及太多 artifacts 了。
  • 这时候 SpringBoot starter 就派上用处了。每一个 stater 都在扮演着提供我们所需的 Spring 特性的一站式商店角色。其他所需的依赖以一致的方式注入并且被管理。
  • 所有的 starter 都归于 org.springframework.boot 组中,并且它们都以由 spring-boot-starter- 开头取名。这种命名方式使得我们更容易找到 starter 依赖,特别是当我们使用那些支持通过名字查找依赖的 IDE 当中。
  • 比如说其中最常用的是:
    spring-boot-starter:核心 starter,包括自动化配置支持,日志以及 YAML
    spring-boot-starter-aop:Spring AOP 和 AspectJ 相关的切面编程 starter
    spring-boot-starter-data-jpa:使用 Hibernate Spring Data JPA 的 starter
    spring-boot-starter-jdbc:使用 HikariCP 连接池 JDBC 的 starter
    spring-boot-starter-security:使用 Spring Security 的 starter
    spring-boot-starter-test:SpringBoot 测试相关的 starter
    spring-boot-starter-web:构建 restful、springMVC 的 web应用程序的 starter

7. SpringBoot的 Actuator 是做什么的?

  • 本质上,Actuator 通过启用 production-ready 功能使得 SpringBoot 应用程序变得更有生命力。这些功能允许我们对生产环境中的应用程序进行监视和管理。
  • 集成 SpringBoot Actuator 到项目中非常简单。我们需要做的只是将 spring-boot-starter-actuator starter 引入到 POM.xml 文件当中。
  • SpringBoot Actuaor 可以使用 HTTP 或者 JMX endpoints来浏览操作信息。大多数应用程序都是用 HTTP,作为 endpoint 的标识以及使用 /actuator 前缀作为 URL路径。
  • 这里有一些常用的内置 endpoints Actuator:
    auditevents:查看 audit 事件信息
    env:查看 环境变量
    health:查看应用程序健康信息
    httptrace:展示 HTTP 路径信息
    info:展示 arbitrary 应用信息
    metrics:展示 metrics 信息
    loggers:显示并修改应用程序中日志器的配置
    mappings:展示所有 @RequestMapping 路径信息
    scheduledtasks:展示应用程序中的定时任务信息
    threaddump:执行 Thread Dump

8. Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

  • Spring Boot 中有以下两种配置文件:

    • bootstrap (.yml 或者 .properties)
    • application (.yml 或者 .properties)
  • bootstrap/ application 的区别:

Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap,,另外一种是 application,,bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。因此,对比 application 配置文件,bootstrap 配置文件具有以下几个特性:1. boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载. 2. boostrap 里面的属性不能被覆盖

  • bootstrap/ application 的应用场景:

application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。
bootstrap 配置文件有以下几个应用场景:1. 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;2. 一些固定的不能被覆盖的属性,一些加密/解密的场景。

9. Spring Boot 的配置文件有哪几种格式?它们有什么区别?

  • .properties 和 .yml,它们的区别主要是书写格式不同。

    • 1).properties
      app.user.name = javastack
    • 2).yml
    app:user:name: javastack

另外,.yml 格式不支持 @PropertySource 注解导入配置。

10. 开启 Spring Boot 特性有哪几种方式?

  • 有以下两种方式:
  1. 继承spring-boot-starter-parent项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
  1. 导入spring-boot-dependencies项目依赖
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>1.5.6.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependencies>
</dependencyManagement>
  • Spring Boot依赖注意点:
  1. 属性覆盖只对继承有效

Spring Boot依赖包里面的组件的版本都是和当前Spring Boot绑定的,如果要修改里面组件的版本,只需要添加如下属性覆盖即可,但这种方式只对继承有效,导入的方式无效。

<properties><slf4j.version>1.7.25<slf4j.version>
</properties>

如果导入的方式要实现版本的升级,达到上面的效果,这样也可以做到,把要升级的组件依赖放到Spring Boot之前。

需要注意,要修改Spring Boot的依赖组件版本可能会造成不兼容的问题。

11. Spring Boot 自动配置原理是什么?

Spring Boot的自动配置注解是@EnableAutoConfiguration, 从上面的@Import的类可以找到下面自动加载自动配置的映射。

org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames(Class<?>, ClassLoader)
public static List<String> loadFactoryNames(Class<?> factoryClass,ClassLoader classLoader){String factoryClassName = factoryClass.getName();try{Enumeration<URL> urls = (classLoader!=null?classLoader.getResources(FACTORIES_RESOURCE_LOCATION):lassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));List<String> result = new ArrayList<String>();while(urls.hasMoreElements()){URL url = urls.nextElement();Properties properties = PropertiesLoaderUtils.loadProperties(new UrlResource(url));String factoryClassNames = properties.getProperty(factoryClassName);result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames)));}return result;}catch(IOException ex){throw new IllegalArgumentException("Unable to load ["+factoryClass.getName()+"] factories from location ["+FACTORIES_RESOURCE_LOCATION+"]",ex);}}

这个方法会加载类路径及所有jar包下META-INF/spring.factories配置中映射的自动配置的类。

/*** The location to look for factories.* <p>Can be present in multiple JAR files.*/

public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
查看Spring Boot自带的自动配置的包: spring-boot-autoconfigure-1.5.6.RELEASE.jar,打开其中的META-INF/spring.factories文件会找到自动配置的映射。

  • 再来看看数据源自动配置的实现注解

    @Configuration,@ConditionalOnClass就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。

12. Spring Boot 的目录结构是怎样的?

Spring Boot 与传统项目最大的区别是,传统项目都是打成 WAR 包部署到服务器上面,需要额外的 Servlet 容器, 而 Spring Boot 则可以直接打成 jar包,并内置集成了 Servlet 容器,通过命令 java -jar xx.jar 则可以直接运行,不需要独立的 Servlet 容器。
打成可执行 jar 包后,我们来看下其中的 META-INF/MANIFEST.MF 文件:

其中有一个 Start-Class 便是这个 jar 包的入口类,这个入口类推荐是放在一个项目的顶层包中,其他所有的类都放在其子包下面,目录结构如以下所示:

这个目录结构是主流及推荐的做法,而在主入口类上加上 @SpringBootApplication 注解来开启 Spring Boot 的各项能力,如自动配置、组件扫描等。

如果你不想这么做,你也可以充分利用 @EnableAutoConfiguration@ComponentScan 注解自定义你的行为,不过这不是推荐的做法。

13. springboot配置监听器、过滤器和拦截器

监听器继承HttpSessionListener

过滤器继承Filter

拦截器继承HandlerInterceptor

配置类注解@Configuration实现WebMvcConfigurer

14. 拦截器过滤器的区别

拦截器可以访问action上下文、值栈里的对象而过滤器不能

拦截器只能对action请求起作用,拦截器可以多次被调用,过滤器可以对几乎所有的请求起作用

Filter在Servlet前后作用,Interceptor在方法的前后作用,异常抛出前后,具有更大的弹性。所以优先使用拦截器。

15. Spring Boot 中如何解决跨域问题 ?

跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Cross-origin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").maxAge(3600);}}

项目中前后端分离部署,所以需要解决跨域的问题。
我们使用cookie存放用户登录的信息,在spring拦截器进行权限控制,当权限不符合时,直接返回给用户固定的json结果。
当用户登录以后,正常使用;当用户退出登录状态时或者token过期时,由于拦截器和跨域的顺序有问题,出现了跨域的现象。
我们知道一个http请求,先走filter,到达servlet后才进行拦截器的处理,如果我们把cors放在filter里,就可以优先于权限拦截器执行。

@Configuration
public class CorsConfig {@Beanpublic 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);}}

--------------------其他增加-------------

8. 怎么简单实现一个springboot应用

1)新建maven项目

2)让项目以spring-boot-starter-parent为父模块

<parent>     <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-parent</artifactId>    <version>2.0.5.RELEASE</version>
</parent>

3)根据场景选择一些starter

<dependency>   <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId>
</dependency>  <dependency>      <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

4)进行application.yml/application.properties配置

server:port: 8080

5)写入口类

@SpringBootApplication public class PetHomeApplication {   public static void main(String[] args) {SpringApplication.run(PetHomeApplication.class,args);    }  }

6)测试

启动main,通过localhost:8080启动不报错

9. springboot怎么实现多环境配置

1)什么是多环境配置

就是一套代码,有可能要在多个环境使用。就要对多种环境进行配置。

2)怎么进行多环境配置

①在一个文件中配置多个环境

②多个文件(application-环境名.yml/properties)

3)怎么指定具体的环境

①默认启动

②指定启动环境

10. springboot项目怎么部署

Springboot默认已经集成了内置的Tomcat,对它进行打包jar后,里面就有tomcat。直接以jar包方式运行就ok。

1)打包

pom.xml加入打包插件<build>      <plugins>          <plugin>            <groupId>org.springframework.boot</groupId>       <artifactId>spring-boot-maven-plugin</artifactId>         </plugin>      </plugins>
</build>打包:mvn clean package

2)部署

windows: java -jar xxx.jar

Linux:后台运行nohup java -jar xxx.jar

11. 说一下springboot自动配置原理

当我们引入了starter,就会使用springboot自动配置原理,对这种场景进行配置。

①Springboot应用入口类通过@SpringBootApplication注解简介使用@EnableAutoConfiguration(是父注解)

②使用@EnableAutoConfiguration后,会扫描所有jar中的spring.factories文件,加载所有的配置类(加了 @Configuration的类)

③配置类(加了@Configuration的类)使用XxxProperties以@Bean的方式完成对应场景的配置

④XxxPropereis里面的配置信息有默认值,但是我们可以在application.properties/application.yml中获取

19. Spring Boot 最核心的 25 个注解

1、@SpringBootApplication

这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。

其实这个注解就是 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan 这三个注解的组合,也可以用这三个注解来代替 @SpringBootApplication 注解。

2、@EnableAutoConfiguration

允许 Spring Boot 自动配置注解,开启这个注解之后,Spring Boot 就能根据当前类路径下的包或者类来配置 Spring Bean。

如:当前类路径下有 Mybatis 这个 JAR 包,MybatisAutoConfiguration 注解就能根据相关参数来配置 Mybatis 的各个 Spring Bean。

3、@Configuration

这是 Spring 3.0 添加的一个注解,用来代替 applicationContext.xml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。

4、@SpringBootConfiguration

这个注解就是 @Configuration 注解的变体,只是用来修饰是 Spring Boot 配置而已,或者可利于 Spring Boot 后续的扩展。

5、@ComponentScan

这是 Spring 3.1 添加的一个注解,用来代替配置文件中的 component-scan 配置,开启组件扫描,即自动扫描包路径下的 @Component 注解进行注册 bean 实例到 context 中。

6、@Conditional

这是 Spring 4.0 添加的新注解,用来标识一个 Spring Bean 或者 Configuration 配置文件,当满足指定的条件才开启配置。

7、@ConditionalOnBean

组合 @Conditional 注解,当容器中有指定的 Bean 才开启配置。

8、@ConditionalOnMissingBean

组合 @Conditional 注解,和 @ConditionalOnBean 注解相反,当容器中没有指定的 Bean 才开启配置。

9、@ConditionalOnClass

组合 @Conditional 注解,当容器中有指定的 Class 才开启配置。

10、@ConditionalOnMissingClass

组合 @Conditional 注解,和 @ConditionalOnMissingClass 注解相反,当容器中没有指定的 Class 才开启配置。

11、@ConditionalOnWebApplication

组合 @Conditional 注解,当前项目类型是 WEB 项目才开启配置。

当前项目有以下 3 种类型。

enum Type {/*** Any web application will match.*/ANY,/*** Only servlet-based web application will match.*/SERVLET,/*** Only reactive-based web application will match.*/REACTIVE}

12、@ConditionalOnNotWebApplication

组合 @Conditional 注解,和 @ConditionalOnWebApplication 注解相反,当前项目类型不是 WEB 项目才开启配置。

13、@ConditionalOnProperty

组合 @Conditional 注解,当指定的属性有指定的值时才开启配置。

14、@ConditionalOnExpression

组合 @Conditional 注解,当 SpEL 表达式为 true 时才开启配置。

15、@ConditionalOnJava

组合 @Conditional 注解,当运行的 Java JVM 在指定的版本范围时才开启配置。

16、@ConditionalOnResource

组合 @Conditional 注解,当类路径下有指定的资源才开启配置。

17、@ConditionalOnJndi

组合 @Conditional 注解,当指定的 JNDI 存在时才开启配置。

18、@ConditionalOnCloudPlatform

组合 @Conditional 注解,当指定的云平台激活时才开启配置。

19、@ConditionalOnSingleCandidate

组合 @Conditional 注解,当指定的 class 在容器中只有一个 Bean,或者同时有多个但为首选时才开启配置。

20、@ConfigurationProperties

用来加载额外的配置(如 .properties 文件),可用在 @Configuration 注解类,或者 @Bean 注解方法上面。

21、@EnableConfigurationProperties

一般要配合 @ConfigurationProperties 注解使用,用来开启对 @ConfigurationProperties 注解配置 Bean 的支持。

22、@AutoConfigureAfter

用在自动配置类上面,表示该自动配置类需要在另外指定的自动配置类配置完之后。

如 Mybatis 的自动配置类,需要在数据源自动配置类之后。

@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class MybatisAutoConfiguration {

23、@AutoConfigureBefore

这个和 @AutoConfigureAfter 注解使用相反,表示该自动配置类需要在另外指定的自动配置类配置之前。

24、@Import

这是 Spring 3.0 添加的新注解,用来导入一个或者多个 @Configuration 注解修饰的类,这在 Spring Boot 里面应用很多。

25、@ImportResource

这是 Spring 3.0 添加的新注解,用来导入一个或者多个 Spring 配置文件,这对 Spring Boot 兼容老项目非常有用,因为有些配置无法通过 Java Config 的形式来配置就只能用这个注解来导入。

20. Spring boot 中的starter是什么?

依赖管理对于项目至关重要。当项目足够复杂时,管理依赖项可能会变成一场噩梦,因为涉及的组件太多了。
这就是Spring Boot 的 starter 就派上用场了。每个starter都可以为我们提供所需要的Spring技术的一站式服务。并且以一致的方式传递和管理其他所需的依赖关系。
所有官方starter都在 org.springframework.boot 组下,其名称以 spring-boot-starter- 开头 。非官方的starter的名称在前,如 mybatis-spring-boot-starter。这种命名模式使得查找启动器变得很容易,尤其是在使用支持按名称搜索依赖关系的IDE时。但是这个不是绝对的,有些开发者可能不遵从这种契约。
目前大概有超过50种官方starter。最常用的是:

  • spring-boot-starter: 核心启动器,包括自动配置支持,日志记录和YAML
  • spring-boot-starter-aop: 使用Spring AOPAspectJ进行面向方面编程的初学者
  • spring-boot-starter-data-jpa: 使用Spring Data JPAHibernate的启动器
  • spring-boot-starter-jdbc: 用于将JDBCHikariCP连接池一起使用的启动器
  • spring-boot-starter-security: 使用Spring Security的启动器
  • spring-boot-starter-test: 用于测试Spring Boot应用程序的启动器
  • spring-boot-starter-web: 使用Spring MVC构建Web的启动器,包括RESTful应用程序

21. 如何禁用特定的自动配置?

22. 如何注册自定义自动配置?

23. 如何根据不同的条件来加载bean?

使用@Conditional 系列注解。 例如@ConditionalOnMissingBean。此注释的最显着属性是:

  • value:要检查的bean类型
  • name:要检查的bean的名称

放置在使用@Bean装饰的方法上时,目标类型默认为方法的返回类型:

表示的意思是如果不存在CustomService类型的bean则初始化并注入该bean。

24. 如何将Spring Boot Web应用程序部署为JAR和WAR文件?

传统上,我们将Web应用程序打包为WAR文件,然后将其部署到外部服务器中。这样做可以让我们在同一台服务器上安排多个应用程序。在CPU和内存稀缺的时候,这是节省资源的好方法。
但事情发生了变化。现在计算机硬件相当便宜,并且注意力转向服务器配置。在部署期间配置服务器的一个小错误可能会导致灾难性后果。
Spring通过提供一个插件即spring-boot-maven-plugin来解决这个问题,将Web应用程序打包为可执行的JAR。要包含此插件,只需向pom.xml添加一个插件元素:

有了这个插件,我们将在执行包阶段后得到一个fat JAR 。此JAR包含所有必需的依赖项,包括嵌入式服务器。因此,我们不再需要担心配置外部服务器。
然后我们可以像运行普通的可执行JAR一样运行应用程序。
请注意,必须将pom.xml文件中的packaging元素设置为 jar 才能构建JAR文件:

25. Spring boot支持哪些外部配置?

Spring Boot支持外部配置,允许我们在各种环境中运行相同的应用程序。我们可以使用properties文件,YAML文件,环境变量,系统属性和命令行选项参数来指定配置属性。
然后,我们可以访问使用这些属性@Value注释,经由绑定对象 的@ConfigurationProperties注释或Environment 环境抽象类注入。
以下是最常见的外部配置来源:

  • 命令行属性:命令行选项参数是以双连字符开头的程序参数,例如-server.port = 8080。Spring Boot将所有参数转换为属性,并将它们添加到环境属性集中。
  • 应用程序属性:应用程序属性是从application.properties文件或其YAML对应文件加载的属性。默认情况下,Spring Boot会在当前目录,类路径根或其config子目录中搜索此文件。

特定于配置文件的属性:特定于配置文件的属性从application- {profile} .properties文件或其YAML对应文件加载。{profile}占位符是指活性轮廓。这些文件与非特定属性文件位于相同位置,并且优先于非特定属性文件。

26.  Spring Boot Actuator有什么用?

Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查、审计、统计和HTTP追踪等。所有的这些特性可以通过JMX或者HTTP endpoints来获得。
Actuator同时还可以与外部应用监控系统整合,比如 PrometheusGraphiteDataDogInfluxWavefrontNew Relic等。这些系统提供了非常好的仪表盘、图标、分析和告警等功能,使得你可以通过统一的接口轻松的监控和管理你的应用。
Actuator使用Micrometer来整合上面提到的外部应用监控系统。这使得只要通过非常小的配置就可以集成任何应用监控系统。
将Spring Boot Actuator集成到一个项目中非常简单。我们需要做的就是在pom.xml文件中包含 spring-boot-starter-actuator启动器:

Spring Boot Actuator可以使用HTTPJMX端点公开操作信息。但是,大多数应用程序都使用HTTP,其中端点的标识和/执行器前缀形成URL路径。
以下是Actuator提供的一些最常见的内置端点:

  • auditevents: 公开审计事件信息
  • env: 公开环境属性
  • health: 显示应用程序运行状况信息
  • httptrace: 显示HTTP跟踪信息
  • info: 显示任意应用程序信息
  • metrics: 显示指标信息
  • mappings: 显示所有@RequestMapping路径的列表
  • scheduledtasks: 显示应用程序中的计划任务
  • threaddump: 执行线程转储
  • `beans :所有加载的spring bean

2021年- 精心整理的 SpringBoot 常见面试题-【附详细答案】相关推荐

  1. 2021年JAVA 精心整理的常见面试题-附详细答案【持续更新~~】

    先罗列本篇文章包含的Java 常见面试的主题: 一.Java基础面试题 二.Java 集合框架 三.Linux常用指令 四.MySQL基础面试 多线程与多进程面试 常见设计模式 JVM 底层 关注我们 ...

  2. BTA 常问的 Java基础40道常见面试题及详细答案,java初级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  3. BTA 常问的 Java基础40道常见面试题及详细答案

    最近看到网上流传着,各种面试经验及面试题,往往都是一大堆技术题目贴上去,而没有答案. 为此我业余时间整理了,Java基础常见的40道常见面试题,及详细答案,望各路大牛,发现不对的地方,不吝赐教,留言即 ...

  4. 精心整理,kafka常见面试题,看这篇文章就够了(共17题,含详细解答)

    [Java架构师面试网]收集整理了几乎整个架构师学习途中会遇到的面试题,希望大家都能早日圆自己的架构师梦~ 公众号:Java架构师面试网,关注回复"资料"即可领取精美整理的面试资料 ...

  5. 2022年软件测试工程师常见面试题,标准答案都在这

    软件测试工程师常见面试题(经典篇),标准答案来了 经常有人问我要软件测试的面试题,2022年小编花了十多天的时间整理的软件测试面试真题.各位小伙伴记好了,也可以把内容分享给身边有需要的朋友哦. 1 . ...

  6. vue常见面试题(附带答案)超实用!!建议收藏!!

    一.vue常见面试题 二.生命周期函数面试题 三.vue路由面试题 四.vuex常见面试题 一.vue常见面试题 1.vue优点? 答:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十 ...

  7. 2021最新整理JAVA常见面试题附答案

    包含的模块: 本文分为十九个模块,分别是:Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Sprin ...

  8. Spring、SpringBoot常见面试题与答案

    Spring Spring Bean 的作用域有哪些?它的注册方式有几种? Spring 容器中管理一个或多个 Bean,这些 Bean 的定义表示为 BeanDefinition 对象,具体包含以下 ...

  9. 2022最新整理软件测试常见面试题附答案

    包含的模块: 本文分为十九个模块,分别是:软件测试 基础.liunx.MySQL.web测试.接口测试.APP测试 .管理工具.Python.性能测试.selenium.lordrunner.计算机网 ...

最新文章

  1. 如何知道一个网络中每个权重的重要性
  2. mybatis中sqlSession的设计与实现
  3. 以MATLAB的方式实现微积分问题的计算机求解问题及解决方案集锦(二)
  4. mysql 有十进制类型吗_MySQL数据类型
  5. boost::hana::adjust_if用法的测试程序
  6. 树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核
  7. php输出12个月,php获取12个月内的开始时间和结束时间
  8. VForum07之四:布道中国 解读本地化策略
  9. 比穷更可怕的事情是什么?
  10. java epoch times_Java 8新特性探究(七)深入解析日期和时间
  11. redis、kafka、rabittMQ对比 (转)
  12. 游戏开发之点和圆的关系,附上C++类结构(C++基础)
  13. 基于linux的贪吃蛇游戏设计_基于Unreal4的战棋类游戏《棋行傀儡》的设计与实现...
  14. SQL SERVER 2012 附加数据AdventureWorks2012失败解决方案
  15. C盘清理后遗症总结(C盘清理)
  16. STM8S103F3P6锁死问题及解锁
  17. 督查督办管理系统在企业管理中起到的作用
  18. CH32V103C8T6入门指导
  19. QQ看点模块100条测试用例
  20. 王阳明心学感悟1——勇敢地剖析自己的内心

热门文章

  1. stoneniqiu 理想就是自己喜欢做,并对社会和他人都有意义的事情!
  2. 如何在本地部署小幺鸡(小幺鸡简单好用的接口管理工具)
  3. JVM系列(十一) 垃圾收集器之 Concurrent Mark Sweep 并发标记清除
  4. python天气预报界面_Python 做 UI 超 easy!(3.1)——天气预报小工具
  5. linux12企业实战 -- 12ubuntu部署K8s集群
  6. Python声学特征神经网络构建区域响度图
  7. 阿里云产品推荐------数据库迁移
  8. 男人找不到女朋友的八大特征
  9. [opencv +VS2017] opencv、vs2017安装配置,环境搭建
  10. pythonw双击没反应快捷方式是ride_RIDE安装遇到的问题及解决方法