原创不易,点个赞💗,支持支持

生活就像心电图一样,一帆风顺就证明挂了,

因此我们需要一颗折腾的心💗

开发中这样的代码

对于每个开发人员都会遇到这样情况,代码如下:

复制代码
@Api(tags = "自定义组合注解", description = "组合注解优化代码") @StandardResult @RequestMapping("/ccww") @Controller @ResponseBody public class CombinationController{ ​ }
复制代码

 

在定义某个类或接口时,使用了Spring自带的注解(@Controller、@Service,@Conditional),同时又要使用公司特定的注解标注公司的业务,接着就出现了以下处理方式的那一幕:

”普通”开发人员

 对于一般开发人员来说,只要功能、需求达到即可,代码也差不多就可以了,生活也就那样。只要不出现BUG,测试人员,产品经理不找,万事大吉了!!!

“高级”开发员(BUG工程师)

对于我们这类“高级”开发员(BUG工程师),看到这样的代码,一个类上声明了五六个注解,长长的一大串注解,代码看起来就很普通,体现不出我们“高级”开发员(BUG工程师)折腾的心💗,BUG创造师的水平

而且注解本意是为了提供我们便捷,代码优化,作标注用。但和XML一样,过度使用就编程了一种灾难。

于是我们持着一颗折腾的心💗,寻找一种可以让自己看来舒服的整洁的代码修正,现在找到了使用组合注解的方式把需要的注解组合在一个自定义的组合注解上。

 

"高级”开发人员(BUG工程师)-基于组合注解方案

首先我们持着一个折腾的心💗,想到平时我们常见的SpringBoot的启动注解@SpringBootApplication

1. 为什么它一个注解可以实现那么多功能呢?

2. 怎么实现的呢?

3. 我们怎么才能在将这个实现转化出自己所需的自定义注解呢?

接下来我们看看它的源码:

复制代码
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = {         @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),         @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication { ​     @AliasFor(annotation = EnableAutoConfiguration.class)     Class<?>[] exclude() default {};      ​     @AliasFor(annotation = EnableAutoConfiguration.class)     String[] excludeName() default {};      ​     @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")     String[] scanBasePackages() default {};          @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")     Class<?>[] scanBasePackageClasses() default {}; ​ }
复制代码