Spring Boot的自动装配原理
“讲述一下springboot自动装配原理”
我觉得可以从一下几个方面来讲解:
1.什么是springboot自动装配?
2.springboot是如何实现自动装配的?如何实现按需加载?
3.如何实现一个starter?
1.什么是springboot自动装配?
自动装配是springboot的核心,一般提到自动装配就会和springboot联系在一起。实际上 Spring Framework 早就实现了这个功能。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化。
SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM 类加载机制与 Spring 的容器知识),并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 SpringBoot 定义的标准,就能将自己的功能装置进 SpringBoot。
没有 Spring Boot 的情况下,如果我们需要引入第三方依赖,需要手动配置,非常麻烦。但是,Spring Boot 中,我们直接引入一个 starter 即可。比如你想要在项目中使用 redis 的话,直接在项目中引入对应的 starter 即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
引入 starter 之后,我们通过少量注解和一些简单的配置就能使用第三方组件提供的功能了。
所以说,其实自动装配可以简单的理解为:通过注解或者一些简单的配置就能在spring boot的帮助下实现某款功能。
2.springboot是如何实现自动装配的?如何实现按需加载?
首先我们先来看一些springboot的核心注解@SpringBootApplication的类:
点击@SpringBootConfiguration注解,发现这个注解其实就是一个配置注解,SpringBoot 把 @Configuration 注解做一个包装。
所以说@SpringBootApplication是一个复合注解,大概就可以把 @SpringBootApplication看作是 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合。根据 SpringBoot 官网,这三个注解的作用分别是: