@Enable*注解的原理
在SpringBoot中,我们很多的功能都能够通过@Enable*注解的方式来开启。
@EnableAspectJAutoProxy开启对自动代理的支持。
@EnableAsync开启异步方法的支持。
@EnableConfigurationProperties开启对@ConfigurationPropertis注解配置Bean的支持。
通过Enable*一键开启对一项功能的支持,避免了自己配置大量的代码,也大大的降低了使用的难度。
我们通过观察@Enable*的这些注解,在所有的注解中都有一个@Import注解。
比如开启web MVC的配置支持:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(DelegatingWebMvcConfiguration.class)
public @interface EnableWebMvc {
}
@Import是用来导入配置类的
1,Import可以直接导入配置类。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(HelloConfig.class)
public @interface EnableHello {
}
public class HelloConfig {
@Bean
public HelloImpl getHello(){
return new HelloImpl();
}
}
这样bean对象就加入到我们的容器中了。
2,也可以动态的注册bean
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(HelloImpl.class)
public @interface EnableHello {
}
所以@import导入配置类,其实是导入了一些自动配置的bean。@