SpringBoot自定义自动配置


前言

为什么需要自定义spring自动配置?

在很多时候,我们会需要开发一些公共组件jar包,同时我们又希望能在项目启动时自动
加载,所以可以通过自定义自动配置包来到达此目的。

准备工作

自动配置原理

如果不懂springboot自动配置原理,可以看先之前一篇springboot自动配置原理

maven引入springboot核心依赖

版本依赖父工程的springboot版本号,可自行决定

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>your-version</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
</project>

开发需要自动注入的组件


import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class AutoConfigDemo {

    @Bean
    @ConditionalOnClass(PooledDataSource.class)
    public DataSource MyDataSource() {
        //比如自己注入一个apache的数据源
        return new PooledDataSource();
    }
}

上述代码首先在类上添加了@configuration注解,说明这是一个配置类,此时这个类就相当于
ssm项目中的applicationContext.xml@Bean 标注的方法则相当于applicationContext.xml中如下配置:

说明:@ConditionalOnClass(PooledDataSource.class)意为当PooledDataSource
类存在时才注入这个bean,可以实现注入bean控制

<bean id="MyDataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource"/>

但是这个项目如果直接作为jar包导入你的主项目里,还不能实现自动注入,还需要在resource目录下建立 META-INF/spring.factories 文件, 如自动配置文中所述位置, 需要注意的是 文件夹必须叫META-INF,文件名也必须是spring.factories,否则无法实现自动注入, 最后 spring.factories 添加如下内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xxx.xxx.xxx.AutoConfigDemo

文件路径如下:

spring.factories路径

com.xxx.xxx.xxx.AutoConfigDemo 是我们的配置类全类名

测试

将项目打成jar包,在主项目中引入,启动主项目,实现自动注入


文章作者: Ubi-potato
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Ubi-potato !
评论
  目录