SpringBoot之Bean之自动加载

浪尽此生 提交于 2020-01-14 03:08:28

1.美图

在这里插入图片描述

2.概述

前面一篇介绍了Bean的常用姿势,在一个项目中,可能不会出现什么问题,可如果你提供了一个Jar包供第三方用户使用,那么你这个jar包中的Bean,能被第三方加载么?

本篇博文将主要介绍AutoConfig相关的内容,即如果我想提供一个jar包供第三方在Spring的环境下使用时,可以怎么做。

3.AutoConfiguration

通常来讲,要想实现上面的场景,建议是借助@Configuration注解的配置类来管理你自己的bean,这样对于其他使用方而言,只需要加载到你的配置类,就可以注册你的所有bean了

3.1 包路径扫描使用姿势

首先是在你的工程中定义一个配置类,如下

@Configuration
@ComponentScan("com.git.hui.boot.autoconfig")
public class SelfAutoConfig {
}

这个配置类功能比较简单,指明扫描的包路径,然后这个配置类如何给使用方使用呢?

将配置放在指定的文件中即可,使用者会自动加载,从而避免的代码的侵入

  1. 在资源目录下新建目录 META-INF
  2. 在 META-INF 目录下新建文件 spring.factories
  3. 在文件中添加 org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.git.hui.boot.autoconfig.SelfAutoConfig
    说明,如果需要换行时,可以如下
rg.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    com.git.hui.boot.autoconfig.SelfAutoConfig,`
    com.git.hui.boot.autoconfig.SelfAutoConfig2,`

然后使用方就可以愉快的使用你的bean了,定义一个测试的Bean如下

@Slf4j
@Component
public class AutoBean {
    private String name;

    public AutoBean() {
        this("defaultAutoBean");
    }

    public AutoBean(String name) {
        this.name = name;
        log.info("AutoBean load time: {}", System.currentTimeMillis());
    }

    public String getName() {
        return name;
    }
}

3.2 定义Bean使用方式

直接在Config配置中,定义Bean,可以说是更加常见的方式,特别是当你的bean不是那么多的时候,推荐使用这种方式,便于集中管理

@Slf4j
public class AutoConfBean {
    private String name;

    public AutoConfBean(String name) {
        this.name = name;
        log.info("AutoConfBean load time: {}", System.currentTimeMillis());
    }

    public String getName() {
        return name;
    }
}

对应的配置类

@Configuration
@ComponentScan("com.git.hui.boot.autoconfig")
public class SelfAutoConfig {

    @Bean
    public AutoConfBean autoConfBean() {
        return new AutoConfBean("auto load + " + System.currentTimeMillis());
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!