spring注解原理剖析

  注解(annotation)其实是一种接口,通过java的反射机制相关的API来访问annotation信息。Java语言解释器会在工作时忽略这些annotation,因此在JVM中这些annotation是不会被处理的,只能通过配套的工具才能对这些annotation类型的信息进行访问和处理。

  annotation的类型使用关键字@interface。它继承了java.lang.annotation.Annotation接口,而不是申明了一个interface。

  Annotation类型、方法定义是独特的、受限制的。Annotation类型的方法必须申明为无参数、无异常抛出的。方法后面可以使用default和一个默认数值来申明成员的默认值,null不能作为成员的默认值。

  元注解@Target,@Retention,@Documented,@Inherited

  @Target表示该注解用于什么地方,@Retention表示在什么级别保存改注解信息,@Documented表示将此注解包含在javadoc中,@Inherited表示允许子类继承父类中的注解。

  注解示例:

1 @Target({ElementType.TYPE,ElementType.METHOD})
2 @Retention(RetentionPolicy.RUNTIME)
3 public @interface NeedLogin{
4     boolean value() default true;
5     boolean guest() default true;
6 }

  解析注解:

1 if(handler instanceof HandlerMethod){
2     HandlerMethod method  = (HandlerMethod)handler;
3     NeedLogin needLogin = method.getMethodAnnotation(NeedLogin.class);
4     if(needLogin == null){
5         needLogin = method.getMethod().getDeclaringClass().getAnnotation(NeedLogin.class);  
7     }  
8 }

  注解本身不做任何事情,只是像xml文件一样起到配置作用。注解代表的是某种业务意义,spring中@Resource注解简单解析:首先解析类的所有属性,判断属性上面是否存在这个注解,如果存在这个注解,再根据搜索规则来取得这个bean,然后通过反射注入。

posted @ 2012-12-18 15:10  matrix.skygirl  阅读(5328)  评论(0编辑  收藏  举报