spring 自定義注解


1、jdk1.5內置了三種標准注解

@Override,表示當前的方法定義將覆蓋超類中的方法。

@Deprecated,使用了注解為它的元素編譯器將發出警告,因為注解@Deprecated是不贊成使用的代碼,被棄用的代碼。

@SuppressWarnings,關閉不當編輯器警告信息。

2、還提供了4種專門負責新注解的創建:

@Target:

@Target –注解用於什么地方,默認值為任何元素,表示該注解用於什么地方。可用的ElementType指定參數
● ElementType.CONSTRUCTOR:用於描述構造器
● ElementType.FIELD:成員變量、對象、屬性(包括enum實例)
● ElementType.LOCAL_VARIABLE:用於描述局部變量
● ElementType.METHOD:用於描述方法
● ElementType.PACKAGE:用於描述包
● ElementType.PARAMETER:用於描述參數
● ElementType.TYPE:用於描述類、接口(包括注解類型) 或enum聲明

@Retention

表示需要在什么級別保存該注解信息。

什么時候使用該注解,即注解的生命周期,使用RetentionPolicy來指定
● RetentionPolicy.SOURCE : 在編譯階段丟棄。這些注解在編譯結束之后就不再有任何意義,所以它們 不會寫入字節碼。@Override, @SuppressWarnings都屬於這類注解。
● RetentionPolicy.CLASS : 在類加載的時候丟棄。在字節碼文件的處理中有用。注解默認使用這種方式
● RetentionPolicy.RUNTIME : 始終不會丟棄,運行期也保留該注解,因此可以使用反射機制讀取該注解的信息。我們自定義的注解通常使用這種方式。

@Document

將注解包含在Javadoc中

@Inherited

允許子類繼承父類中的注解

 

1.定義

@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented()
public @interface MyAnnotation { String name() default ""; //如果變量為value,后面使用是可以不指定value }


2.使用
@MyAnnotation(name="CC")  // @MyAnnotation("cc")
public @interface MyAnnotation { String name() default ""; }

3.現在就可以對注解的類進行操作,有2中方式
第一種.
  實現
BeanFactoryPostProcessor接口---> 可以在spring的bean創建之前,修改bean的定義屬性。也就是說,Spring允許BeanFactoryPostProcessor在容器實例化任何其它bean之前讀取配置元數據,並可以根據需要進行修改,
@Component
public class HessianInterfaceConfig implements BeanFactoryPostProcessor{
private final Log log = LogFactory.getLog(getClass());

@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
HashMap<String, String> interfaceMap = new HashMap<>();
String[] beanNames = beanFactory.getBeanNamesForAnnotation(MyAnnotation.class);
  ....可以進行一系列處理,例如:動態暴露接口等
}
}
 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM