Java-注解

主要知识点

Java-注解_第1张图片
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-注解)