美食电子商务网站建设规划书,手机杭州网,头像制作免费模板,整合网络营销策划3.2 自动配置
我们讲解了SpringBoot当中起步依赖的原理#xff0c;就是Maven的依赖传递。接下来我们解析下自动配置的原理#xff0c;我们要分析自动配置的原理#xff0c;首先要知道什么是自动配置。
3.2.1 概述
SpringBoot的自动配置就是当Spring容器启动后#xff0c…3.2 自动配置
我们讲解了SpringBoot当中起步依赖的原理就是Maven的依赖传递。接下来我们解析下自动配置的原理我们要分析自动配置的原理首先要知道什么是自动配置。
3.2.1 概述
SpringBoot的自动配置就是当Spring容器启动后一些配置类、bean对象就自动存入到了IOC容器中不需要我们手动去声明从而简化了开发省去了繁琐的配置操作。 比如我们要进行事务管理、要进行AOP程序的开发此时就不需要我们再去手动的声明这些bean对象了我们直接使用就可以从而大大的简化程序的开发省去了繁琐的配置操作。 下面我们打开idea一起来看下自动配置的效果 运行SpringBoot启动类 大家会看到有两个CommonConfig在第一个CommonConfig类中定义了一个bean对象bean对象的名字叫reader。
在第二个CommonConfig中它的bean名字叫commonConfig为什么还会有这样一个bean对象呢原因是在CommonConfig配置类上添加了一个注解Configuration而Configuration底层就是Component 所以配置类最终也是SpringIOC容器当中的一个bean对象 在IOC容器中除了我们自己定义的bean以外还有很多配置类这些配置类都是SpringBoot在启动的时候加载进来的配置类。这些配置类加载进来之后它也会生成很多的bean对象。 比如配置类GsonAutoConfiguration里面有一个beanbean的名字叫gson它的类型是Gson。 com.google.gson.Gson是谷歌包中提供的用来处理JSON格式数据的。 当我们想要使用这些配置类中生成的bean对象时可以使用Autowired就自动注入了
import com.google.gson.Gson;
import com.itheima.pojo.Result;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
SpringBootTest
public class AutoConfigurationTests {
Autowiredprivate Gson gson;
Testpublic void testJson(){String json gson.toJson(Result.success());System.out.println(json);}
}
添加断点使用debug模式运行测试类程序 问题在当前项目中我们并没有声明谷歌提供的Gson这么一个bean对象然后我们却可以通过Autowired从Spring容器中注入bean对象那么这个bean对象怎么来的
答案SpringBoot项目在启动时通过自动配置完成了bean对象的创建。 体验了SpringBoot的自动配置了下面我们就来分析自动配置的原理。其实分析自动配置原理就是来解析在SpringBoot项目中在引入依赖之后是如何将依赖jar包当中所定义的配置类以及bean加载到SpringIOC容器中的。
3.2.2 常见方案
3.2.2.1 概述
我们知道了什么是自动配置之后接下来我们就要来剖析自动配置的原理。解析自动配置的原理就是分析在 SpringBoot项目当中我们引入对应的依赖之后是如何将依赖jar包当中所提供的bean以及配置类直接加载到当前项目的SpringIOC容器当中的。
接下来我们就直接通过代码来分析自动配置原理。 准备工作在Idea中导入资料\03. 自动配置原理下的itheima-utils工程 1、在SpringBoot项目 spring-boot-web-config2 工程中通过坐标引入itheima-utils依赖 Component
public class TokenParser {public void parse(){System.out.println(TokenParser ... parse ...);}
} 2、在测试类中添加测试方法
SpringBootTest
public class AutoConfigurationTests {
Autowiredprivate ApplicationContext applicationContext;
Testpublic void testTokenParse(){System.out.println(applicationContext.getBean(TokenParser.class));}
//省略其他代码...
} 3、执行测试方法 异常信息描述 没有com.example.TokenParse类型的bean 说明在Spring容器中没有找到com.example.TokenParse类型的bean对象 思考引入进来的第三方依赖当中的bean以及配置类为什么没有生效 原因在我们之前讲解IOC的时候有提到过在类上添加Component注解来声明bean对象时还需要保证Component注解能被Spring的组件扫描到。 SpringBoot项目中的SpringBootApplication注解具有包扫描的作用但是它只会扫描启动类所在的当前包以及子包。 当前包com.itheima 第三方依赖中提供的包com.example扫描不到 那么如何解决以上问题的呢 方案1ComponentScan 组件扫描 方案2Import 导入使用Import导入的类会被Spring加载到IOC容器中