zoukankan      html  css  js  c++  java
  • Java 注解2

    java 注解是先标记

    后面当需要时,通过注解相关的特殊方法来触发. 反射 reflect 来使用注解


    java 注解 与 python 装饰器的不同


    先说java的注解(Annotation),实际上是给语法元素打一个标记。比如你可以给一个函数打一个标记,给一个类打一个标记等等。Java只保证记录这个标记,但是不会主动根据这给标记做任何事。

    比如,你在Spring里,给一个私有成员打 @Autowired 这个标记。
    public class XXXService {

    @Autowired
    private XXXXRepository xxxxRepository;

    // ...
    }
    如果你不用Spring框架的话,不会有任何事情发生,直接访问这个字段就是空。当如果你配置了合适的处理流程,而这个流程就会根据有没有这个标记干活。比如你要求Spring “Auto Scan” 并且注入依赖,这个处理过程会用反射去读哪些元素被做了某个特定标记。没有标记就不理,有标记就注入。

    Java的Annotation因为相当于多加了一层(标记 + 处理逻辑),是一把双刃剑。好处是,在不动代码的情况下你可以通过外部配置来修改程序的行为。比如给一个函数打上@Test标。如果通过UT框架运行,这些打标的函数会被当作是测试用例;但如果外部直接用普通的main启动,这些@Test就会没有一样,不会影响代码本身的逻辑。但反过来,也容易引来一些问题。比如有的时候,你很难知道那个根据标记执行的逻辑是不是真的跑了。也许你哪里配置拼错一个字,或者classpath少依赖一个包,就造成那个逻辑并没有真的执行。这时从表面上也许很难看出来出错了

    Python 的装饰器很单一,就是通过一层壳对一个函数的行为进行修饰,而@decorator_func 只是一个语法糖,用以梅花装饰器的写法。
    Java 中的注解则不同,它是从语言层面为代码中的类,函数,字段增加一些运行时可以读到的元数据,而注解的提供者要在运行时对这些元数据进行读取,并做相应的处理
    Java 语言层面只提供定义注解类,编译时解析注解并保存到类文件中,在运行时提供反射机制供注解开发者读取这些元数据。
    比如在 Spring 中利用注解取代配置文件XML, 而这些注解在运行时被Spring读取来进行装配。


    个人总结:
    注解是在运行时,根据运行的实际情况来确定注解的运行。 而且注解本身已经由他人写好了(相当于别人帮你把程序写好了)可能不对 ^^

  • 相关阅读:
    IntelliJ IDEA自动补全变量名称和属性名称的快捷键
    Redis客户端 Spring Data Redis(未完)
    用画小狗的方法来解释Java中的值传递
    Java -- Arrays.asList()方法
    有趣的IntegerCache
    字符串使用点滴
    字符串拼接+和concat的区别
    在一个Excel单元格内输入多行内容
    JSTL1.2学习总结
    Android ico
  • 原文地址:https://www.cnblogs.com/moveofgod/p/12257111.html
Copyright © 2011-2022 走看看