原理
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