Java 什么是注解及注解原理详细介绍

Java 什么是注解及注解原理详细介绍,第1张

1、注解是针对Java编译器的说明。

可以给Java包、类型(类、接口、枚举)、构造器、方法、域、参数和局部变量进行注解。Java编译器可以根据指令来解释注解和放弃注解,或者将注解放到编译后的生成的class文件中,运行时可用。

2、注解和注解类型

注解类型是一种特殊的接口类型,注解是注解注解类型的一个实例。

注解类型也有名称和成员,注解中包含的信息采用键值对形式,可以有0个或多个。

3、Java中定义的一些注解:

@Override 告诉编译器这个方法要覆盖一个超类方法,防止程序员覆盖出错。

@Deprecated 这个标识方法或类(接口等类型)过期,警告用户不建议使用。

@SafeVarargs JDK7新增,避免可变参数在使用泛型化时候警告”执行时期无法具体确认参数类型“,当然,也可以用@SuppressWarnings来避免检查,显然后者的抑制的范围更大。

@SuppressWarnings(value={"unchecked"}) 抑制编译警告,应用于类型、构造器、方法、域、参数以及局部变量。 value是类型数组,有效取值为:

all, to suppress all warnings

boxing, to suppress warnings relative to boxing/unboxing operations

cast, to suppress warnings relative to cast operations

dep-ann, to suppress warnings relative to deprecated annotation

deprecation, to suppress warnings relative to deprecation

fallthrough, to suppress warnings relative to missing breaks in switch statements

finally, to suppress warnings relative to finally block that don't return

hiding, to suppress warnings relative to locals that hide variable

incomplete-switch, to suppress warnings relative to missing entries in a switch statement (enum case)

javadoc, to suppress warnings relative to javadoc warnings

nls, to suppress warnings relative to non-nls string literals

null, to suppress warnings relative to null analysis

rawtypes, to suppress warnings relative to usage of raw types

restriction, to suppress warnings relative to usage of discouraged or forbidden references

serial, to suppress warnings relative to missing serialVersionUID field for a serializable class

static-access, to suppress warnings relative to incorrect static access

static-method, to suppress warnings relative to methods that could be declared as static

super, to suppress warnings relative to overriding a method without super invocations

synthetic-access, to suppress warnings relative to unoptimized access from inner classes

unchecked, to suppress warnings relative to unchecked operations

unqualified-field-access, to suppress warnings relative to field access unqualified

unused, to suppress warnings relative to unused code and dead code

4、注解的定义

使用 @interface 关键字声明一个注解

public @interface MyAnnotation1

注解中可以定义属性

String name default “defval”;

value是注解中的特殊属性

注解中定义的属性如果名称为 value, 此属性在使用时可以省写属性名

例如,声明一个注解:

@Retention(RetentionPolicyRUNTIME)

public @interface MyAnno1 {

String msg();

int value();

}

我没看过代码。但是要实现这个也不难:

通过反射知道了对象一共有哪些注解,装在一个 Map 中,

然后通过 Map 反过来,再通过注解找对象。

所谓注释,就是编译的时候不鸟他,所以编译之后的class文件是没有注释的,所以你会发现eclipse引入的jar包,把鼠标放上去,如果不自己设置jar包的源码路径,是不会看到注释的~你这需求不可能实现,如果有源码,倒是可以把,毕竟eclipse已经有这个功能了

一、从注解中获取

使用注解方式,我们需要自定义一个注解,在注解中指定参数名,然后通过反射机制,获取方法参数上的注解,从而获取到相应的注解信息。这里自定义的注解是Param,通过value参数指定参数名,定义了一个工具类ParameterNameUtils来获取指定方法的参数名列表,这里获取测试类ParameterNameTest中定义的方法method1的参数名列表表,下面是具体的代码。

java 注解大致分为2类

运行时注解

编译期注解

运行时注解,主要通过反射获取注解信息,在执行你想执行的代码

编译期注解,在编译的时候,就已经处理过,运行的时候不会在处理,编译期注解实现需要实现系统的注解处理器。就是说在java代码编译的时候,生成一个新的类。

既然是基于spring,可以这样:

ResourcePatternResolver rpr = new PathMatchingResourcePatternResolver();

Resource[] res = rprgetResources("classpath: /class"); // classpath:带号会找jar中的class

然后根据resource取clas路径就行

String className = res[0]getURL()getPath();

className = classNamesplit("(classes/)|(!/)")[1];

className = classNamereplace("/", "")replace("class", "");

Object obj = ClassforName(className);

话说我最近也在写一个这样的MVC。。要不咱两合伙? 我写的也是基于注解,不过要支持REST风格

以上就是关于Java 什么是注解及注解原理详细介绍全部的内容,包括:Java 什么是注解及注解原理详细介绍、java 自定义注解 反向获取问题、请问 java 怎么获取一个类里面属性上方的注释等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9330055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存