一、什麼是元註解、組合註解
元註解:可以註解到別的註解上的註解
組合註解: 被註解的註解
二、annotationCombineDemo
組合註解
package com.cactus.demo.annotation_combine;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Created by liruigao
* Date: 2019-12-09 11:16
* Description:
* 組合@Configuration與@ComponentScan
* 一篇比較好的屬性覆蓋講解文章(https://www.cnblogs.com/goodAndyxublog/p/11181200.html)
*/
// 註解使用範圍,TYPE : 類型上面 用於描述類、接口(包括註解類型) 或enum聲明
@Target(ElementType.TYPE)
// 註解生命週期,RUNTIME :表示 一個註解可以在源碼、字節碼、及運行時期該註解都會存在
@Retention(RetentionPolicy.RUNTIME)
// documented by javadoc
@Documented
@Configuration
@ComponentScan
public @interface BriefConfiguration {
// 同名屬性隱式覆蓋
String[] value() default {};
}
方法bean
package com.cactus.demo.annotation_combine;
import org.springframework.stereotype.Service;
/**
* Created by liruigao
* Date: 2019-12-09 11:24
* Description:
*/
@Service
public class ACDemo {
public void show() {
System.out.println("I am created by @BriefConfiguration");
}
}
配置類
package com.cactus.demo.annotation_combine;
/**
* Created by liruigao
* Date: 2019-12-09 11:25
* Description:
*/
@BriefConfiguration("com.cactus.demo.annotation_combine")
public class ACConfig {
}
Main
package com.cactus.demo.annotation_combine;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* Created by liruigao
* Date: 2019-12-09 11:26
* Description:
*/
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ACConfig.class);
ACDemo acDemo = context.getBean(ACDemo.class);
acDemo.show();
context.close();
}
}
Result
I am created by @BriefConfiguration