美文网首页
Java-注解

Java-注解

作者: Rockie_h | 来源:发表于2018-03-20 23:43 被阅读20次

    主要知识点

    Annotation思维导图.png

    Annotation和class interface等java关键字一样,提供注解的定义,所有自定义注解都默认继承Annotation,就像所有类都默认继承Object一样。

    一个简单测试例

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    @Documented
    public @interface Hello
    {
        /**
         * 注解方法,无方法体,无异常,相当于注解的一个配置参数,参数名就是方法名
         */
        String hello() default "";
    }
    
    @Hello(hello="hello world!")
    public class HelloWorld 
    {
        public static void main(final String[] args)
        {
            Annotation annotation = HelloWorld.class.getAnnotation(Hello.class);
            System.out.println(annotation.annotationType());
            if(annotation instanceof Hello)
            {
                Hello hello = (Hello)annotation;
                System.out.println(hello.hello());
            }       
        }
    }
    

    运行结果:
    interface com.rockie.annotation.test.Hello
    hello world!

    注解在开源框架中的应用

    注解本身无法主动提供任何能力,必须要通过调用者或解析框架来解析以后,根据注解来控制程序行为。注解在框架中的应用非常广泛,如下举例说明。

    1. spring注解:后面解读spring源码会专门介绍
    2. dubbo中的注解:
      dubbo可扩展的核心是扩展点机制,通过注解实现。主要注解包括@SPI @Adaptive等。
      后面补充源码说明...
    3. 工作中一个大数据分析存储框架的使用:
      通过自定义注解@TQL,标识自定义算子,实现TQL语句中可以调用java扩展的算法。如下示例所示,虽然没看过源码,但是可以很容易推测出来实现原理。框架服务会加载扩展类,解析类注解,并缓存起来@TQL注解类对应的注解value(parseMac)。sql解析的时候,会根据parseMac获得实际的运算算子,然后构建查询语句执行。
    sql: select parseMac(mac) as mac ... from ... 
    
    @TQL(value="parseMac")
    public class ParseMac
    {
    }
    ~~~|

    相关文章

      网友评论

          本文标题:Java-注解

          本文链接:https://www.haomeiwen.com/subject/tkuiqftx.html