aspectj表达式如何书写_如何引入依赖包中的Bean? 即@EnableAutoConfiguration和@ComponentScan的使用方法。...

工作原因,需要springboot项目启动的时候注入依赖包中的Bean,如何做呢?

一般有两种方式:

1.使用 @EnableAutoConfiguration

2.使用 @ComponentScan

1.使用 @EnableAutoConfiguration

在项目 spring-boot-autoconfiguration 中:

目录结构如下:

a4eeba67d092e915ed8c2452e066f975.png

代码如下:

@Componentpublic class ExcludeAutoBean {    private static Logger logger = LoggerFactory.getLogger(ExcludeAutoBean.class);     @PostConstruct    public void init() {        logger.info("-------------------------------------------------------------------");        logger.info("--------------------- Auto ExcludeBean @Componet 注入成功 ---------------------");        logger.info("-------------------------------------------------------------------");    }}
@Componentpublic class IncludeAutoBean {    private static Logger logger = LoggerFactory.getLogger(IncludeAutoBean.class);     @PostConstruct    public void init() {        logger.info("-------------------------------------------------------------------");        logger.info("--------------------- Auto IncludeBean @Componet 注入成功 ---------------------");        logger.info("-------------------------------------------------------------------");    }}

spring.factories 文件目录结构:

a4eeba67d092e915ed8c2452e066f975.png

内容如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.autoconfig.include.IncludeAutoBean,\com.autoconfig.exclude.ExcludeAutoBean

将spring-boot-autoconfiguration打成jar,由其他项目引入。

10c5cf2f96b7ea07a3076c380f935109.png

在项目 spring-boot-autoconfiguration-test 中引入这个jar

        <dependency>            <groupId>spring-boot-autoconfigurationgroupId>            <artifactId>autoconfigurationartifactId>            <version>1.0-SNAPSHOTversion>        dependency>

在该项目中会自动引入上述的Bean。可以手动排除不想要的(注意excludeName只能是EnableAutoConfiguration配置类)

08efa421b67dcccefb55be2fa573d7b0.png

启动日志:035c91bea373beaa1bda75cd6f12eaf3.png

实际上,我们一般不这么使用。一般是结合 @ConfigurationProperties和@EnableConfigurationProperties来进行自定义starter,做启动配置,来注入启动Bean。(这里不详述,网上有大量例子,可以自行搜索)

2.使用 @ComponentScan

先说一下FilterType的枚举类型:

public enum FilterType {    ANNOTATION,       // @注解    ASSIGNABLE_TYPE,  // 指定类    ASPECTJ,          // ASPECTJ表达式    REGEX,            // 正则    CUSTOM            // 自定义规则}

spring-boot-autoconfiguration 目录结构:

eef2ced5e7de549a2dab16f5f8ad199b.png

@Componentpublic class ExcludeBean {    private static Logger logger = LoggerFactory.getLogger(ExcludeBean.class);     @PostConstruct    public void init() {        logger.info("-------------------------------------------------------------------");        logger.info("--------------------- ExcludeBean @Componet 注入成功 ---------------------");        logger.info("-------------------------------------------------------------------");    }}
@Componentpublic class SubIncludeBean {    private static Logger logger = LoggerFactory.getLogger(SubIncludeBean.class);     @PostConstruct    public void init() {        logger.info("-------------------------------------------------------------------");        logger.info("--------------------- SubIncludeBean @Componet 注入成功 ---------------------");        logger.info("-------------------------------------------------------------------");    }}
@Componentpublic class IncludeBean {    private static Logger logger = LoggerFactory.getLogger(IncludeBean.class);     @PostConstruct    public void init() {        logger.info("-------------------------------------------------------------------");        logger.info("--------------------- IncludeBean @Componet 注入成功 ---------------------");        logger.info("-------------------------------------------------------------------");    }}
@Componentpublic class Bean {    private static Logger logger = LoggerFactory.getLogger(Bean.class);     @PostConstruct    public void init() {        logger.info("-------------------------------------------------------------------");        logger.info("--------------------- Bean @Componet 注入成功 ---------------------");        logger.info("-------------------------------------------------------------------");    }}

同样发布成依赖包,给spring-boot-autoconfiguration-test调用

720bf9f47ac099208aef58b8e7c365e9.png

@SpringBootApplication(excludeName = "com.autoconfig.exclude.ExcludeAutoBean")// 扫描指定包: com.config.bean, 只包含 com.config.bean.include.* 及其该目录下的子包//@ComponentScan(//        value = "com.config.bean",//        includeFilters = {//                @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.config.bean.include.*")//        },//        // useDefaultFilters默认是true,默认会扫描所有的@Component,所以必须设置为false//        useDefaultFilters = false//)@ComponentScan(        value = {"com.config.bean"},        excludeFilters = {                @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.config.bean.exclude.*"),        })public class AutoConfigTestApplication {    public static void main(String[] args) {        SpringApplication.run(AutoConfigTestApplication.class, args);    }}

上面用的 

@ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.config.bean.exclude.*")

表示排除一些不想要的Bean.

启动日志:(ExcludeBean没有被加载)

2a1402405df2ae71fe13bd61bdbd7d27.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值