之 Java如何識(shí)別注解
關(guān)鍵詞:Java 反射
java.lang.reflect 包湃鹊,實(shí)現(xiàn)反射功能的工具類肤视。
注解處理類庫(kù):java.lang.reflect.AnnotatedElement。
程序通過(guò)反射獲取了某個(gè)類的AnnotatedElement對(duì)象之后, 程序就可以調(diào)用該對(duì)象如下的方法來(lái)訪問(wèn)Annotation的信息:
- Annotation[] getAnnotations()
Returns annotations that are <em>present</em> on this element.
- default boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
Returns true if an annotation for the specified type
is <em>present</em> on this element, else false.
- default <T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass)
Returns this element's annotation for the specified type if
such an annotation is <em>directly present</em>, else null.
為了處理注解祈搜,** 注解處理器 **做3件事情:
- 讀取配置文件中管理的bean
- 實(shí)例化bean
- 注解處理器獲取實(shí)例bean中的注解并操作
前提假設(shè):
我們已經(jīng)自定義注解類宪躯,如 @RequestMapping 注解類,
并在合適的bean做出注解標(biāo)注。
則編寫自己的注解處理器祈秕。
// 自定義的注解處理器
public class ClassPathXMLApplicationContext {
public ClassPathXMLApplicationContext(String configFileName) {
// 讀取配置文件中管理的bean
readXMLConfigFile(configFileName);
// 實(shí)例化bean
instanceBean();
// 向容器注冊(cè)bean
registerAnnotationBean();
}
// 讀取配置文件中的bean
private void readXMLConfigFile() {
}
// 實(shí)例化bean
private void instanceBean() {
}
// 向容器注冊(cè)bean
private void registerAnnotationBean() {
}
}
Spring 是如何實(shí)現(xiàn)注解的掃描注冊(cè)的?
請(qǐng)參考 Spring注解原理探索(四)之Spring處理注解的源碼分析
[待續(xù)]