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自动配置的实现机制,可参考其它博客。

本文是在参考其它博文的基础上通过逻辑整理得来,若有错误之处,请不吝赐教。

posted @ 2019-04-17 22:57  L-craftsman  阅读(196)  评论(0编辑  收藏  举报