欢迎光临散文网 会员登陆 & 注册

零基础学java之javaSE,注解

2020-11-18 16:41 作者:每天一个秃顶小技巧  | 我要投稿

第一节 反射应用:完善DBUtil,提取select()

1.1 认识ResultSetMetaData

利用ResultSet的getMetaData的方法可以获得ResultSetMeta对象,而ResultSetMetaData存储了 ResultSet的MetaData。

所谓的MetaData在英文中的解释为“Data about Data”,直译成中文则为“有关数据的数据”或者“描述数据的数据”,一般翻译为“元数据”,实际上就是描述及解释含义的数据。

以Result的MetaData为例,ResultSet是以表格的形式存在,所以MetaData就包括了数据的字段名称、类型以及数目等表格所必须具备的信息。就是其结构信息(就是desc tablename所显示的内容)。

1.2 提取DBUtil的select()

【示例2】提取DBUtil类的查询方法

1.3功能2:简化DAO的select方法

【示例3】简化后的DAO层查询代码

第二节 注解

2.1 认识注解
Annotation ,JDK1.5新提供的技术
我们在编程中经常会使用到注解,作用有:
1)编译检查:比如@SuppressWarnings, @Deprecated 和 @Override 都具有编译检查作用
2)替代配置文件:使用反射来读取注解信息
目前大部分框架(如Spring)都使用了注解简化代码并提高编码的效率(使用注解之前使用的xml进行配置)
注解其实就是代码里的特殊标记,它用于替代配置文件:传统方式通过配置文件告诉类如何运行,有了注解技术后,开发人员可以通过注解告诉类如何运行。
在Java技术里注解的典型应用是:可以通过反射技术去得到类里面的注解,以决定怎么去运行类。 注解可以标记在包、类、属性、方法,方法参数以及局部变量上,且同一个地方可以同时标记多个注解。
注解可以在编译(source),类加载(class),运行时(runtime)被读取,并执行相应的处理,以便于其他工具补充信息或者进行部署

2.2 内置注解
主要有三个内置注解
● @Override - 检查该方法是否是重载方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
● @Deprecated - 标记过时方法。如果使用该方法,会报编译警告。
● @SuppressWarnings - 指示编译器去忽略注解中声明的警告。



从 Java 7 开始,额外添加了 3 个注解:
● @SafeVarargs - Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
● @FunctionalInterface - Java 8 开始支持,标识一个匿名函数或函数式接口。
● @Repeatable - Java 8 开始支持,标识某注解可以在同一个声明上使用多次。

2.3 元注解
元注解是指注解的注解,在JDK 1.5中提供了4个标准的用来对注解类型进行注解的注解类。可以使用这4个元注解来对我们自定义的注解类型进行注解

1. @Retention-用来约束注解的生命周期,分别有三个值,源码级别(source),类文件级别(class)或者运行时级别(runtime),若没有 @Retention,则默认是 RetentionPolicy.CLASS。其含有如下:
● SOURCE:注解将被编译器丢弃(该类型的注解信息只会保留在源码里,源码经过编译后,注解信息会被丢弃,不会保留在编译好的class文件里)
● CLASS:注解在class文件中可用,但会被VM丢弃(该类型的注解信息会保留在源码里和class文件里,在执行的时候,不会加载到虚拟机中)。
● RUNTIME:注解信息将在运行期(JVM)也保留,因此可以通过反射机制读取注解的信息(源码、class文件和执行的时候都有注解的信息),如SpringMvc中的@Controller、@Autowired、@RequestMapping等。
2. @Target -用来约束注解可以应用的地方(如方法、类或字段),其中ElementType是枚举类型。若没有 @Target,则该 Annotation 可以用于任何地方

3. @Documented - 标记这些注解是否包含在用户文档中。
4. @Inherited - 指示注解类型被自动继承。如果在注解类型声明中存在 Inherited 元注解,并且用户在某一类声明中查询该注解类型,同时该类声明中没有此类型的注解,则将在该类的超类中自动查询该注解类型。

3.1 自定义注解

【示例5】自定义注解

总结:
Ø 定义注解的关键字是@interface
Ø 自定义注解中可以定义多个配置参数,不是成员方法,不是成员变量;说明参数的名称,以及参数值的类型
Ø 如果只有一个配置参数,一般命名为value
Ø 如果配置参数是value,并且只有一个配置参数,value可以省略

注意:
Ø 定义注解时,意味着它实现了 java.lang.annotation.Annotation 接口,即该注解就是一个Annotation。
Ø 和我们通常的 implements实现接口的方法不同。Annotation 接口的实现细节都由编译器完成。通过 @interface 定义注解后,该注解不能继承其他注解或接口。
Ø 注解常见的API及其关系如下


3.2 使用反射读取注解
目前大部分框架(如Spring、MyBatis、SpringMVC)都使用了注解简化代码并提高编码的效率(使用注解之前使用的xml进行配置)。


【示例6】模拟实现MyBatis的注解并使用反射读取

本文摘自网络

如果你也对java感兴趣,你可以点击下方了解一下

JAVA全套课程_尚学堂Java入门_Java零基础必备_Java编程课程_Java核心基础

零基础学java之javaSE,注解的评论 (共 条)

分享到微博请遵守国家法律