Java注解再学习

注解就是一个标识符,用来标识身份、处理规则等。注解是出现可以代替XML配置文件,使程序更加清晰明了。注解也是框架配置的发展方向,对于Spring而言,虽然有人反对使用注解对Spring进行配置,说这是违背了Spring的IoC的理念,其实不然。使用注解将Java类注解为配置文件和使用XML是一样的,还可以减少配置文件,并且更加自由化的定义bean的初始化过程。

注解是一门比较简单却很实用的技术,定义注解使用@interface关键字:

1 public @interface MyAnnotation {
2
3 }

在注解类的头上使用注解@Retention可以配置注解生效时间

-- RetentionPolicy.RUNTIME 运行时,即class文件载入内存处理为字节码以后

-- RetentionPolicy.SOURCE 源文件时,即在.java文件状态时生效

-- RetentionPolicy.CLASS 类文件时,即在.class文件状态时生效

通常使用RUNTIME时间范围。

在注解类头上使用注解@Target可以配置注解可以运用在什么位置

-- ElementType.TYPE 类头上

-- ElementType.METHOD 方法头上

-- ElementType.FIELD 属性头上

-- ElementType.PACKAGE 包头上

-- ElementType.ANNOTATION 注解头上

-- ...(其他不常用)

1 @Retention(RetentionPolicy.RUNTIME)
2 @Target({ElementType.TYPE, ElementType.METHOD})
3 public @interface MyAnnotation {
4
5 }

PS:为@Target指定多个可用范围时传入数组参数即可。

为注解增加属性类似于写一个抽象方法,在使用注解时,以属性的方式使用,使用default来指定注解属性的默认值

 1 @Retention(RetentionPolicy.RUNTIME)
 2 @Target(ElementType.TYPE)
 3 public @interface MyAnnotation {
 4
 5     String name() default "Bob"; //指定了默认值的属性在使用注解时可以不配置
 6
 7     String value(); //将属性名声明为value,若使用注解时只需要配置value属性,可以直接填入值,而不需要使用赋值操作
 8
 9     int[] iArr(); //注解属性的类型可以为数组、枚举、注解
10 }

为了直观表名上述属性的配置,示例如下:

1 @MyAnnotation(value="jason", iArr={1,2,3})
2 public class User {
3
4 }

在使用注解时使用 属性名= 属性值的格式为注解的属性赋值,在注解类中使用default声明了默认值的属性可以不用配置,系统将自动调用其默认值。特别的:

如果我们将iArr属性也设置了默认值,那么在使用注解时我们只需要配置value属性的值即可,如下:

1 @MyAnnotation("jason")
2 public class User {
3
4 }

当注解中的某个属性声明为value这个名称时,在配置时可以直接传入属性值,而不需要使用属性名= 属性值的格式。前提是除了value以前的其他属性都设置了default值,不需要显示配置的情况下。

光有一个注解是没有用的,注解必须要配合反射使用,才能发挥作用:

 1 public class Test {
 2
 3     public void main(String[] args) {
 4         Class<User> clazz = User.class;
 5         //判断这个类的头上是否存在MyAnnotation这个注解
 6         if (clazz.isAnnotationPresent(MyAnnotation.class)) {
 7             //获得注解
 8             MyAnnotation anno = clazz.getAnnotation(MyAnnotation.class);
 9             anno.value(); //获得配置的属性值
10         }
11     }
12
13 }

通过使用isAnnotationPresent(Class<? extends Annotation> clazz)方法来判断某个注解是否存在,然后进行不同的业务操作,这就是注解配合反射的使用。

Java注解再学习,布布扣,bubuko.com

时间: 2024-12-20 00:00:45

Java注解再学习的相关文章

Java反射再学习

在最初学习Java的时候觉得反射真的好难,并不是技术负责,而是思想复杂,无法接受.随着工作经验的增多,今日偶然间又看见某智的一个视频,感觉茅塞顿开.顺便在此系统整理一下反射的知识. 一言以蔽之:反射就是将Java类的各个组成部分转换为对应的Java对象. 我们知道,一切皆对象,那么这个“一切”必然也包含了Java类啊,Java类也是一种事物,那么他是什么的对象呢?毫无疑问,Java类是Class类的对象.(PS:那么Class类又是谁的对象呢?求大神指教?这问题貌似无穷无尽啊 %>_<% )

Java泛型再学习

泛型是对于数据的一种规范,他限定了类.容器.方法可以接受的参数类型,避免参数类型混乱. 一.基本泛型 泛型最常见的地方就是集合,如: -- ArrayList<String>  表示这个集合中只能存放String类型的元素 -- HashMap<String, Object>  表示这个图中只能存放键为String类型,值为Object类型的元素 特别要注意的时,泛型只存在于编译阶段,在程序运行阶段,我们定义的泛型是并不存在的,这种方案叫“擦除”,示例: 1 public clas

Java注解Annotation学习笔记

一.自定义注解 1. 使用关键字 @interface 2. 默认情况下,注解可以修饰 类.方法.接口等. 3. 如下为一个基本的注解例子: //注解中的成员变量非常像定义接口 public @interface MyAnnotation { //不带有默认值 String name(); //带有默认值 int age() default 20; } 4. Reflect中3个常见方法解读 getAnnotion(Class<T> annotationClass) 返回该元素上存在的,指定类

java注解的学习

package package3; import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;//注解的注解@Retention(RetentionPolicy.RUNTIME)//表示注解试用的范围,此处是表示只用到变量上@Target(El

Java注解简单学习

注解(也被称作元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们在稍后某个时刻可以很方便的使用这些数据,其在一定程度上将元数据与源代码文件结合在一起,而不是保存在外部文档中. 注解使我们可以用将来由编译器测试和验证的格式,存储程序有关的额外信息.注解可以用来生成描述符文件,甚至是新的类定义,并且有助于减轻编写"样板"代码的负担.通过使用注解,将元数据保存在Java源代码中,并利用annotation API为注解构造处理工具来读取注解. Java目前只内置了三种标准注解,以及

Java枚举再学习

枚举是JDK 5以后引入的,被称作新特性,虽然JDK 5推出已经N年了,不过鉴于这个版本在Java里程碑上的重要性,就姑且继续称作新特性吧. 枚举的定义: 1 public enum Lamp { 2 RED,GREEN,YELLOW; 3 } 枚举使用关键字enum定义,enum是enumeration的缩写.枚举的基本作用是将所需要的可选项罗列出来,以控制程序只能获得被罗列出的选项,可以当做是一种规范.而枚举元素通常采用全大写,因为枚举元素属于固定项,和常量类似. 枚举的每一个元素都代表这个

对于java注解的理解

java注解是学习java过程中一项非常实用的技能,很简单易懂,却不容忽视.关于注解,我们知道,它是从JDK5及其以后JDK版本开始支持Java注解: Java注解(Annotation)也叫作元数据,以‘@注解名’在代码中存在,它是一种在源代码中标注的特殊标记,可以标注源代码中的类.属性.方法.参数等代码,主要用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查. Java注解按照是否含有参数分为三种:1.不带参数,语法结构为:@Annotation 2.带一个参数的注解,语法结构为:@A

恶补java(十)---泛型与集合的再学习

其余的就不多说了,一切都在代码中 package com.gc.generic; /** * JDK5 之前集合对象使用问题: * 1.向集合添加任何类型对象 * 2.从集合取出对象时,数据类型丢失,使用与类型相关方法,强制类型转换 * 存在安全隐患 * * ***************************** * * JDK5中的泛型:允许程序员使用泛型技术限制集合的处理类型 * List<String> list=new ArrayList<String>(); * 从而

java 注解 学习

周末闲来无事,想要研究一下注解方面的知识,以前看过几次,都忘记了,这次学习下,并且写篇文章记录下, 1.元注解  元注解是指注解的注解.包括 @Retention @Target @Document @Inherited四种. 1.1.@Retention: 定义注解的保留策略  Java代码 复制代码代码如下: @Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含 @Retention(RetentionPolicy.CL