SpringBoot自动配置原理及手动实现自动配置

之前我们学习了SpringBoot中的配置文件及外部化配置,了解了SpringBoot对于配置文件的功能支持与增强,本篇我们将要来学习SpringBoot的自动配置原理及手动实现自动配置。

数据库依赖引起的bug

我们很多人在第一次使用SpringBoot的时候,往往对其原理认知不足,或者简单的了解以后就开始入门使用,往往最常见的就是使用SpringBoot添加一个持久化框架的依赖,用来尝试操作数据库,比如:


1.  ``

2.  `org.springframework.boot`

3.  `spring-boot-starter-jdbc`

4.  ``

接着我们启动SpringBoot,异常出现了,SpringBoot居然启动不了?
SpringBoot自动配置原理及手动实现自动配置_第1张图片

看报错信息,似乎是我没有配置url导致数据源注入失败,但是我仅仅是引入了一个依赖,什么操作也没有啊?看来SpringBoot帮我们引入的db框架尝试进行自动注入了,我们在Spring中如何配置一个数据源的呢?


1.  ``

3.  ``

4.  ``

5.  ``

6.  ``

7.  ``

那么岂不是代表着,我们仅仅引入一个 spring-boot-starter-jdbc 的依赖,SpringBoot帮我们自动配置了一个dataSource的bean?百度了一下,我们知道,可以在springboot启动类中排除datasource自动配置类来解决此问题,如下:


1.  `@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)`

这样就可以使得SpringBoot启动的时候不去自动配置数据源,但是SpringBoot是如何实现的自动配置呢?

SpringBoot中配置Bean的几种方式

在思考这个问题之前,我们先来看看,在SpringBoot中我们如果要配置一个Bean,有哪几种方式:

@Service/@Component

在SpringBoot中不建议使用xml配置创建实例Bean,而在Spring中我们知道,如果不使用xml配置,我们往往可以在一个类上使用 @Service或者 @Component注解,Spring启动的时候,Spring容器会自动扫描带有此注解的类,并且注册该类的实例到Spring容器中,在SpringBoot也完全支持此种方式:

@Configuration /@Bean

在SpringBoot中使用了注解驱动的方式,可以给类添加 @Configuration注解标记此类为配置类,也可以给类添加 @Bean注解ÿ

你可能感兴趣的:(程序员,面试,java,经验分享)