java里的反射的作用
Java中的注解到底是如何工作的?
Java中的注解到底是如何工作的?
什么是注解
注解是在Java5.0版本中被引入,其目的是用于描述数据,我们可以把他当作标签,每加上一个注解就相当于给类/方法/字段贴上来标签,而标签的作用我们很明白,通过标签我们可以知道这个类/方法/字段是做什么的。
为什么使用注解
在程序开发中,如果我们看到@Override,我们是很容易理解它的作用就是对实现方法的重写,而这也达到设计之初的目标,即描述数据。
继续以Override为例子,我们在实现父类方法的时候通常会带上该注解,但是我们不带也不会对运行有任何影响,但是如果我们把注解放到非实现的方法上,编译就会报错。也就是说注解会告诉编译我是做什么的,如果我做的和预期不一样,那么编译器会对我们程序进行纠错,即对不合注解含义的业务进行处理(这个处理不是注解去处理,只是看上去像是注解的作用)。
注解如何工作
对于@Override使用在非父类方法上编译报错的情况,我们最初接触的时候可能会认为这些报错的作用是注解的作用,但是实际上并不全是,这是因为注解仅仅是标签亦或者说是元数据。他的作用一开始仅仅是为类描述数据,而后衍生出来的各种功能是由前端编译器在编译成class的时候会有一个专门的注解处理器,是他在编译过程中对诸多注解,如@Override,会有专门的代码完成@Override标志的业务逻辑。简单的说,注解只是标签,而标签具有的功能是由前端编译器
在生成语法树之后有专门的代码去实现。
如果我们有使用自定义注解的经验,我们会发现如果我们单单定义一个注解放在类/方法/字段上,那么它只有一个标签的效果,并没有什么实际的意义,比如我们自定义NotEmpty注解,表达不能为空,我们将其注解加入到字段上,即使传空也没有任何问题,这是因为没有相应业务的支持。如果想要达到想要的效果,我们就需要专门写业务逻辑去实现这个NotEmpty功能
希望我的回答能对您有所帮助。
spring注解原理?
注解(Annotation) 提供了一种安全的类似注释的机制,为我们在代码中添加信息提供了一种形式化得方法,使我们可以在稍后某个时刻方便的使用这些数据(通过解析注解来使用这些 数据),用来将任何的信息或者元数据与程序元素(类、方法、成员变量等)进行关联。其实就是更加直观更加明了的说明,这些说明信息与程序业务逻辑没有关 系,并且是供指定的工具或框架使用的。Annotation像一种修饰符一样,应用于包、类型、构造方法、方法、成员变量、参数及本地变量的申明语句中。
Annotation其实是一种接口。通过java的反射机制相关的API来访问Annotation信息。相关类(框架或工具中的类)根据这些信息来决定如何使用该程序元素或改变它们的行为。Java语言解释器在工作时会忽略这些Annotation,因此在JVM中这些Annotation是“不起作用”的,只能通过配套的工具才能对这些Annotation类型的信息进行访问和处理。