Java注解到底是怎么运行的?比如Spring的@Autowire,Struts2的@Inject等,它们是各个框架自己去运行的么?那是怎么运行的,是有对应的java代码么?javaSpringStruts注解

解决方案 »

  1.   

    http://zxf-noimp.iteye.com/blog/1071765
      

  2.   

    spring的特性。扫描注解,解析注解。
    具体实现过程看源码吧。..
    public @interface Autowire{
            ...
    }
      

  3.   

    任何一个注解都是有元注解定义而成的,而元注解有四个:@Target,@Retention,@Document,@Inherited。你所看到的除了这四个注解之外的注解都是有这些java最基本的四个注解自定义而成的注解。
    1.@Target元注解有8个元素的值:
    (1)ElementType.TYPE -- 表明该注解可以用于到类,接口(注解),枚举上;
    (2)ElementType.ANNOTATION_TYPE -- 表明该注解只能用于注解上;
    (3)ElementType.FIELD -- 表明该注解能用到成员变量上;
    (4)ElementType.LOCAL_VARIABLE -- 表明该注解可以用到局部变量上;
    (5)ElementType.METHOD -- 表明该注解可以加到方法上面;
    (6)ElementType.PARAMETER -- 表明该注解可以用到参数上;
    (7)ElementType.CONSTRUTOR -- 表明该注解可以用到构造器上;
    (8)ElementType.PACKAGE -- 表明该注解可以加到包上.
    2.@Retention元注解有四个元素值:
    (1)RetentionPolicy.CLASS -- 该注解的信息保留在程序源码里,也会保留在编译好的.class文件里面;
    (2)RetentionPolicy.SOURCE -- 该注解的信息只会保留在程序源码里;
    (3)RetentionPolicy.RUNTIME -- 该注解的信息在运行时可以获得,通过java的反射机制可以得到具体的信息.
    3.@Document元注解表明该注解可以在javadoc中可见.
    4.@Inherited被此元注解标识的注解一旦作用于具体的域,该注解将作用于该域的子类域.由于@Retention(RetentionPolicy.RUNTIME)的标注,可以在运行时通过的java的反射原理找到具体的信息.例如:Spring的@Autowire标识到了某个方法上面的话。可以通过:
    Demo demo = new Demo();
    Field demoField = demo.class.getField();
    Annotation autowired = demoField.getAnnotation();//得到这个标识可以干很多的罗伊判断
    System.out.print(autowired);//xxx.xx.xx.@Autowired
    这样Spring就知道了这个成员属性被加了Autowired注解,也就创建这个属性bean并且给这个属性赋值.希望能帮到你.最近在看注解和反射知识,若有不详或错误请纠正.谢谢.