做网站的技术风险,怎么做应援网站,免费引流微信推广,周口市城乡建设局网站转载自 Spring Boot 最核心的 3 个注解详解
最近面试一些 Java 开发者#xff0c;他们其中有些在公司实际用过 Spring Boot, 有些是自己兴趣爱好在业余自己学习过。 然而#xff0c;当我问他们 Spring Boot 最核心的 3 个注解是什么#xff0c;令我失望的是鲜有人能答上来…转载自 Spring Boot 最核心的 3 个注解详解
最近面试一些 Java 开发者他们其中有些在公司实际用过 Spring Boot, 有些是自己兴趣爱好在业余自己学习过。 然而当我问他们 Spring Boot 最核心的 3 个注解是什么令我失望的是鲜有人能答上来这样你能说你对 Spring Boot 很了解吗这可能还会给你减分
你所需具备的基础 什么是 Spring Boot? Spring Boot 核心配置文件详解 Spring Boot 开启的 2 种方式 Spring Boot 自动配置原理、实战 Spring Boot 2.x 启动全过程源码分析
更多请在Java技术栈微信公众号后台回复关键字boot。
Spring Boot 核心注解讲解
Spring Boot 最大的特点是无需 XML 配置文件能自动扫描包路径装载并注入对象并能做到根据 classpath 下的 jar 包自动配置。
所以 Spring Boot 最核心的 3 个注解就是
1、Configuration org.springframework.context.annotation.Configuration 这是 Spring 3.0 添加的一个注解用来代替 applicationContext.xml 配置文件所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。
下面几个相关注解也是非常重要的
Bean
用来代替 XML 配置文件里面的 bean ... 配置。
ImportResource
如果有些通过类的注册方式配置不了的可以通过这个注解引入额外的 XML 配置文件有些老的配置文件无法通过 Configuration 方式配置的非常管用。
Import
用来引入额外的一个或者多个 Configuration 修饰的配置文件类。
SpringBootConfiguration
这个注解就是 Configuration 注解的变体只是用来修饰是 Spring Boot 配置而已或者可利于 Spring Boot 后续的扩展源码如下。
Target(ElementType.TYPE)
Retention(RetentionPolicy.RUNTIME)
Documented
Configuration
public interface SpringBootConfiguration {}2、ComponentScan org.springframework.context.annotation.ComponentScan 这是 Spring 3.1 添加的一个注解用来代替配置文件中的 component-scan 配置开启组件扫描即自动扫描包路径下的 Component 注解进行注册 bean 实例到 context 中。
另外ComponentScans 是可重复注解即可以配置多个用来配置注册不同的子包。
关于重复注解大家可以看这篇文章《JAVA元注解interface详解》。
3、EnableAutoConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration 看全路径就知道这是自 Spring Boot 诞生时添加的注解用来提供自动配置上面的两个都是 spring-context 包下的不属于 Spring Boot所以 Spring 3.0 之后的去 XML 配置方式已经为 Spring Boot 埋下了伏笔
自动配置更多详细使用及实战可以看这篇文章《Spring Boot自动配置原理、实战》。
最后的彩蛋
Spring Boot 最核心的 3 个注解介绍完了大家可能会有疑问为什么最主要的注解 SpringBootApplication 不在其中
留给大家的彩蛋其实这个 SpringBootApplication 注解就包含了以上 3 个主要注解平时没有自定义配置的需求则使用 SpringBootApplication 注解完全就可以了
让我们来看下 SpringBootApplication 注解的源码一切明了
Target(ElementType.TYPE)
Retention(RetentionPolicy.RUNTIME)
Documented
Inherited
SpringBootConfiguration
EnableAutoConfiguration
ComponentScan(excludeFilters {Filter(type FilterType.CUSTOM, classes TypeExcludeFilter.class),Filter(type FilterType.CUSTOM, classes AutoConfigurationExcludeFilter.class) })
public interface SpringBootApplication {...}