springboot自动配置
springboot是在spring基础上的一次跃迁,是约定先于配置
的完美实践。
最近在学习springboot相关内容,看到自动配置这个知识点时,着实有些困惑,网上大多博客多介绍何为springboot自动配置及其实现原理,读完依然还有些云遮雾绕。
鉴于现今我浅薄的spring知识,并不深刻知道springboot自动配置相较于spring的原始配置之间究竟有何不同,遂遍历多篇相关博客并请教大佬,才堪堪在逻辑上对二者之区别略有知晓。
我想从spring之XML配置到spring之注解配置后至springboot自动配置这个逐渐演进的过程来说明此中缘由,或许有助于各位理解。
spring之XML配置
此阶段的spring若要将第三方jar包导入至spring的IOC容器,需要如下几个步骤:
-
maven导入第三方jar包依赖;
-
在spring的默认配置文件(XML文件)中创建bean标签,表明需要导入的服务类;
-
在第三方jar所属配置文件(XML文件)中对这个依赖进行若干参数配置;
这样,当启动spring应用时,此jar包相关类便会被spring收集并注册到spring的IOC容器之中。
然而,这样操作的结果是若引入jar包太多,则spring的默认配置文件中的bean标签将会数不胜数,终至配置文件太过臃肿。因此,基于javaConfig的注解配置方式应运而生。
spring之注解配置
为了不使spring配置文件体量太大,javaConfig定义多个注解来完成对第三方jar包的引入。
-
maven导入第三方jar包依赖;
-
舍弃传统的基于xml配置文件的配置方式,使用@Configuration和@Bean两个注解在代码中创建服务配置类;
-
jar包若干参数便可在这个服务配置类中定义,也可在jar包所属配置文件中配置;
这样的操作方式在大型项目中使xml配置文件的个数和大小锐减,项目的整个工程结构更加清晰,便于开发和维护。
然而,喜欢化繁为简的软件工程师们就这样满足了吗???
当然不会!!!
为了践行约定先于配置
的工程思想,springboot横空出世。springboot的出现,再一次大大简化了启动一个web项目需要的步骤。我们不需要再自己启动一个servlet容器,
也不需要传统xml配置文件的繁琐配置,只需要简单的将所需jar包引入到pom文件,那么一个简单的web项目就可以启动。当然,我们也可以在springboot的application.yml文件中进行个性化配置。
springboot的自动配置就简化了jar包引入,我们不需要再自己写服务配置类,@EnableAutoConfiguration注解已经帮助我们将依赖bean注入到IOC容器,我们只需要在代码中使用
@Autowired注解就可以轻松获取。springboot自动配置提供了一系列约定配置,当我们想进行个性化定制时,这些约定配置便被覆盖。
下面以druid为例来介绍配置导入的演化过程。
- xml配置方式
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="url" value="${jdbc.mysql.master.url}" />
<property name="username" value="${jdbc.mysql.master.username}" />
<property name="password" value="${jdbc.mysql.master.password}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1" />
<property name="minIdle" value="1" />
<property name="maxActive" value="20" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
<!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
<property name="filters" value="stat" />
</bean>
---------------------
作者:Na头发不会秃
来源:CSDN
原文:https://blog.csdn.net/weixin_43781108/article/details/86713508
- javaConfig注解配置方式
@Configuration
public class DruidConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
}
---------------------
作者:申明霜
来源:CSDN
原文:https://blog.csdn.net/sms15732621690/article/details/81275817
-
springboot配置方式
springboot中引入druid的starter项目之后,无需自己编写服务配置类,springboot已经通过其自动配置功能将DataSource接口注入到IOC中。可见,springboot自动配置
大大简化了引入第三方jar包的配置。
如果想深入了解springboot自动配置的实现机制,可参考其它博客。
本文是在参考其它博文的基础上通过逻辑整理得来,若有错误之处,请不吝赐教。