spring.factories 注入bean,以切面为例

原理

springboot启动时会扫描MATE-INF下所有的spring.factories文件,并且将类名以及对应的值(值可通过,分割)一一对应保存下来。
比如扫描EnableAutoConfiguration时,就会把其值保存下来,同注解的@Configuration类一起通过spring进行初始化。这种方式常常用在各个工具的start包中,例如Spring-cloud-Hystrix就是通过这种方式加载Hystrix的,只不过EnableCircuitBreaker中EnableCircuitBreakerImportSelector进行了重写,大致原理和EnableAutoConfiguration的AutoConfigurationImportSelector差不多

在这里插入图片描述
在这里插入图片描述

1.定义切面类

@Aspect
public class MyAspect {

    public MyAspect(){
        System.out.println("加载-0--1-");
    }

    @Pointcut(value = "execution(* com.example.demoTestMVC.test.TestController.*(..)) ")
    public void cut(){};

    @Before("cut()")
    public void point(JoinPoint joinPoint){
        System.out.println("进入切面");
    }
}

2.直接通过spring.factories注入切面

在这里插入图片描述

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.demoTestMVC.test.MyAspect

3.通过其他bean注入切面bean,适用于一次性注入多个bean

3.1 定义spring.factories 中注入bean
public class TestConfig {

    @Bean
    public MyAspect TestConfig(){
        System.out.println("加载-0---");
		//测试代码,获取spring.factories文件中EnableAutoConfiguration的类名称
        List<String> configurations = SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,
                ClassUtils.getDefaultClassLoader());

        System.out.println(configurations);
        return new MyAspect();
    }
}

在这里插入图片描述

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.demoTestMVC.test.TestConfig
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值