所谓的组合注解就是和元注解区分开,组合注解是我们自己声明创建的,组合注解包含多个元注解的功能。例如上面的@Conditional就是元注解。
应用一个简单的demo来演示组合注解,这里组合注解将包含两个元注解的功能@Configuration和@ComponentScan这两个标签。
首先创建一个组合注解,这个组合注解包含元注解@Configuration和@ComponentScan的功能
/**
* Created by lengshan on 2018/4/10 0010.
* 这里验证使用自定义组合注解代替spring 的元注解
* @Target(ElementType.TYPE)表示注解的使用范围 Target通过ElementType的枚举值来确定适用范围
* TYPE:类或接口 METHOD:用于方法上 CONSTRUCTOR:构造方法上
* @Retention(RetentionPolicy.RUNTIME) 表示被他所标注的注解的保留时间
* SOURCE代码级编译时忽略 CLASS默认的编译时保留JVM忽略 RUNTIME JVM保留所以他能在运行时被JVM读取和使用
* @Documented 表明这个注解应该被javadoc之类的工具处理
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
@ComponentScan
public @interface CombineAnnotation {
String[] value();
}
创建demo的bean
/**
* Created by lengshan on 2018/4/10 0010.
*/
@Service
public class DemoBean {
public void output(){
System.out.println("bean容器中注册了");
}
}
编写配置文件应用组合注解
/**
* Created by lengshan on 2018/4/10 0010.
*
* 这里使用@CombineAnnotation代替注解@Configuration和@ComponentScan
*/
@CombineAnnotation("com.example.demo")
public class MyConfig {
}
编写main函数
@SpringBootApplication
public class DemoCombineannotationApplication {
public static void main(String[] args) {
SpringApplication.run(DemoCombineannotationApplication.class, args);
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
DemoBean demo =context.getBean(DemoBean.class);
demo.output();
context.close();
}
}
参考:《Java EE开发的颠覆者 spring boot实战》