Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
  • @ComponentScan:Spring组件扫描。

    自动配置的原理

    首先在启动类上的@SpringBootApplication包含了@EnableAutoConfiguration注解,内容如下:
  1. @Target(ElementType.TYPE)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. @Inherited
  5. @AutoConfigurationPackage
  6. @Import(AutoConfigurationImportSelector.class)
  7. public @interface EnableAutoConfiguration {
  8. }

主要是@Import注解,它使用了AutoConfigurationImportSelector.class来注入,具体如下:

  1. public class AutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLoaderAware,
  2. ResourceLoaderAware, BeanFactoryAware, EnvironmentAware, Ordered {
  3. ...
  4. @Override
  5. public String[] selectImports(AnnotationMetadata annotationMetadata) {
  6. if (!isEnabled(annotationMetadata)) {
  7. return NO_IMPORTS;
  8. }
  9. // 1.将spring-autoconfigure-metadata.properties的键值对配置载入到PropertiesAutoConfigurationMetadata对象中并返回
  10. AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
  11. .loadMetadata(this.beanClassLoader);
  12. // 2.基于各种配置计算需要import的configuration和exclusion
  13. AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(autoConfigurationMetadata,
  14. annotationMetadata);
  15. return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
  16. }
  17. }

1.会去读取spring-autoconfigure-metadata.properties,2会去读取spring.factory文件。
spring.factory如下:

  1. #Wed Nov 06 21:22:57 GMT 2019
  2. org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration=
  3. org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration.AutoConfigureAfter=org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration
  4. org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveDataAutoConfiguration.ConditionalOnClass=com.datastax.driver.core.Cluster,reactor.core.publisher.Flux,org.springframework.data.cassandra.core.ReactiveCassandraTemplate
  5. org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration.ConditionalOnClass=org.apache.solr.client.solrj.SolrClient,org.springframework.data.solr.repository.SolrRepository

spring-autoconfigure-metadata.properties如下:

  1. org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration.AutoConfigureAfter=org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration

也就是说spring.factories是告诉你有哪些配置类需要加载,spring-autoconfigure-metadata.properties是对应配置类需要自动装配的条件。

什么是Spring Boot

SpringBoot简化了Spring应用开发,约定大于配置,去繁化简。

SpringBoot、Spring MVC和Spring有什么区别?

Spring包含了SpringMVC,而SpringBoot又包含了Spring或者说是在Spring的基础上做得一个扩展。image.png

SpringBoot 打成jar和普通的jar有什么区别?

Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过java -jar xxx.jar命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。

Spring Boot 的 jar 无法被其他项目依赖,主要还是他和普通 jar 的结构不同。普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在 \BOOT-INF\classes目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。

如何实现Spring Boot应用程序的安全性?

使用Spring自带的组件Spring Security,配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其方法。

Shiro和Spring Security的区别

  • Spring Security是一个重量级的安全管理框架;Shiro则是一个轻量级的安全管理框架;
  • Spring Security概念复杂,配置繁琐;Shiro概念简单、配置简单;
  • Spring Security功能强大;Shiro功能简单。

    Spring Boot的核心注解是哪些?他主由哪几个注解组成的?

    启动类上面的注解是@SpringBootApplication,他也是SpringBoot的核心注解,主要组合包含了以下3个注解:

  • @SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能;

  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置的功能:@SpringBootApplication(exclude={DataSourceAutoConfiguration.class});
  • @ComponentScan:Spring组件扫描。

    SpringBoot有哪几种读取配置的方式?

    Spring Boot 可 以 通 过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量。

    Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

    Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架。

    SpringBoot 2.X有哪些新特性?与1.X有什么区别?

  • 配置变更

  • JDK版本升级
  • 第三方类库升级
  • 响应式Spring编程支持
  • HTTP/2支持
  • 配置属性绑定
  • 更多改进与加强