springboot设计模式 SpringBoot开发自己的Enable功能
@Enable*是springboot中用来启用某一个功能特性的一类注解。其中包括我们常用的@SpringBootApplication注解中用于开启自动注入的Annotation@EnableAutoConfiguration,开启异步方法的annotation@EnableAsync,开启将配置文件中的属性以bean的方式注入到IOC容器的annotation@EnableConfigurationProperties等。
随便打开几个@Enable*的源码,比如@EnableSync,@EnableCircuitBreaker, @EnableCache这些类中都有共同点使用了@Import注解
@Import 这个类的注释是这么说的:
Indicates one or more component classes to import — typically @Configuration classes.
@Import用来导入一个或多个类(bean被spring容器托管)、或者配置类(配置类里面的Bean都会被spring容器托管)
在Spring4.2以后,@Import还支持导入普通的没有@Configuration注解的类。
接下来就实现自定义的一个Enable
自定义注解类:
@Retention(RetentionPolicy.RUNTIME)
@Import(Pack.class)
public @interface EnablePack {
int maxConnections() default 1000;
}
Pack.Java
public class Pack implements ImportAware, applicationContextAware {
private ApplicationContext ctx ;
private int maxConnections;
@Override
public void setImportMetadata(AnnotationMetadata annotationMetadata) {
Map<String, Object> attributesMap = annotationMetadata.getAnnotationAttributes(EnablePack.class.getName());
AnnotationAttributes attrs = AnnotationAttributes.fromMap(attributesMap);
this.maxConnections = attrs.getNumber("maxConnections");
System.out.println(ctx.getBean(ProductService.class)) ;
System.out.println(this.maxConnections);
}
public void store(){
System.out.println(this.maxConnections);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.ctx = applicationContext ;
}
}
ImportAware 接口主要配合@Import注解使用开启xxx功能。这里也可以通过继承AdviceModeImportSelector或者直接实现ImportSelector接口 来实现我们的功能。
启动类:
@SpringBootApplication
@EnableCaching
@EnablePack(maxConnections = 10000)
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
启动服务后,在控制台可以看到输出信息。
完毕!!!
给个关注,转发呗,谢谢!!!
Restful API设计规范
Java代码开发规范
SpringBoot多数据源配置详解
SpringBoot Atomikos多数据源分布式事务
Spring MVC 异步请求方式
Spring MVC 异常处理方式
SpringMVC参数统一验证方法
zookeeper实现分布式缓存
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com