本文目录一览:
- 1、java注解的实质,何为注解
- 2、java 注解可以继承注解吗
- 3、java里的注解都有哪些?都有什么用处啊?
- 4、深入浅出Java注解 / Java注解是如何工作的
- 5、java中的注解@Generated
- 6、java注解是怎么实现的
java注解的实质,何为注解
注解实质是预先告之“解释器”下面的“方法(函数)与某个注册事件相绑定”。
比如当某个地址被Post 访问时,你希望你的程序作出响应,以往传统方法可能需要在web.xml 配置文件中写上一堆配置映射关系,设定事件的响应。
通“注解”就不用这样复杂了。省去了在配置中文件中注册、配置映射等工作。
简单点说:注解就是告之 当某个事件发生时,该交给谁来处理,该如何处理。
java 注解可以继承注解吗
这个是没有实现的。
解释:注释本身具有针对性,也就是注释是自定义的,根据实际需要可以修改,此类内容并没有固定的内容规范,所以是没办法进行注释继承的,只能继承方法,不能继承注释的。
整个继承层次结构中的父类和子类的所有属性都映射到同一个表中, 他们的实例通过一个辨别符(discriminator)列来区分.:
//父类
@Entity
//继承映射成一张表的表结构是 父类字段+子类字段+一个鉴别字段(因为可以有多个子类继承父类,这个鉴别字段用于分别一条数据记录是属于那个子类的)
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
//鉴别字段 name="鉴别字段名称" discriminatorType 鉴别字段数据类型
@DiscriminatorColumn(
name="planetype",
discriminatorType=DiscriminatorType.STRING
扩展资料:
Annotation(注解)是JDK1.5及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,可以将注解分为:标记注解、单值注解、完整注解三类。
都不会直接影响到程序的语义,只是作为注解(标识)存在,可以通过反射机制编程实现对这些元数据(用来描述数据的数据)的访问。另外,可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件、或者运行时中出现(SOURCE/CLASS/RUNTIME)。
参考资料来源:百度百科-Java 注解
java里的注解都有哪些?都有什么用处啊?
注释有 3 中基本类型a. 标记注释 -- 没有变量,只有名称标识。例如 @annotationb. 单一值注释 -- 在标记注释的基础上提供一段数据。如 @annotation(“data”)c. 完整注释 -- 可以包括多个数据成员,每个数据成员由名称和值构成。@annotation(val1="data1",val2="data2")Java 中提供 3 个内置注释类型a. Override ,只能用于方法 ( 不能用于类,包声明或者其他构造 )作用:可以保证编译时候 Override 函数的声明正确性用法: @Overridepublic void fun(){..}b.Deprecated 同样只能作用与方法作用:对不应再使用的方法进行注解用法: @Deprecated public void fun{...} // 它们说这个注释跟函数要同一行c.SupressWarnings 可以注释一段代码作用:关闭特定的警告信息,例如你在使用泛型的时候未指定类型用法: @SupressWarnings(value={"unchecked"}).. 代码Java 中还提供了四种元注释,专门负责注释其他的注释@Target 表示该注释可以用于什么地方。可用的 ElementType 参数包括:CONSTRUCTOR : 构造器的声明FIELD : 域声明 ( 包括 enum 实例 )LOCAL_VARIABLE : 局部变量声明METHOD : 方法声明PACKAGE : 包声明PARAMETER : 参数声明TYPE : 类、接口 ( 包括注解类型 ) 或 enum 声明@Retention 表示需要在什么级别保存该注释信息。可选的 RetentionPoicy 参数包括:SOURCE : 注释将被编译器丢掉CLASS : 注释在 class 文件中可用,但会被 VM 丢弃RUNTIME : VM 将在运行时也保留注释,因此可以通过反射机制读取注释的信息。
深入浅出Java注解 / Java注解是如何工作的
给java注解下个定义
用一个词就可以描述注解,那就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。Annotation是一种应用于类、方法、参数、变量、构造器及包声明中的特殊修饰符。它是一种由JSR-175标准选择用来描述元数据的一种工具。
注解的本质
Annotations仅仅是元数据,和业务逻辑无关。理解起来有点困难,但就是这样。如果Annotations不包含业务逻辑,那么必须有人来实现这些逻辑。元数据的"使用者"来做这个事情。Annotations仅仅提供它定义的属性(类/方法/包/域)的信息。Annotations的"使用者"(同样是一些代码)来读取这些信息并实现必要的逻辑。当我们使用Java的标注Annotations(例如@Override)时,JVM就是一个“使用者”,它在字节码层面工作。mok:"当我们使用用于Servlet的注解(例如@WebInitParam)时,容器就是一个'使用者';当我们使用框架提供的注解时,框架中的某个组件会负责做读取后的逻辑处理。"
java中的注解@Generated
用来标注源代码中的某些东西是由某些工具生成的,而不是人写的。
这个注解可以用于:包、类、注解类、方法、构造方法、变量、本地变量、方法参数。
java注解是怎么实现的
注解的使用一般是与java的反射一起使用,下面是一个例子
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
自定义注解及其应用
1)、定义一个最简单的注解
public @interface MyAnnotation {
//......
}
2)、把注解加在某个类上:
@MyAnnotation
public class AnnotationTest{
//......
}
以下为模拟案例
自定义注解@MyAnnotation
1 package com.ljq.test;
2
3 import java.lang.annotation.ElementType;
4 import java.lang.annotation.Retention;
5 import java.lang.annotation.RetentionPolicy;
6 import java.lang.annotation.Target;
7
8 /**
9 * 定义一个注解
10 *
11 *
12 * @author jiqinlin
13 *
14 */
15 //Java中提供了四种元注解,专门负责注解其他的注解,分别如下
16
17 //@Retention元注解,表示需要在什么级别保存该注释信息(生命周期)。可选的RetentionPoicy参数包括:
18 //RetentionPolicy.SOURCE: 停留在java源文件,编译器被丢掉
19 //RetentionPolicy.CLASS:停留在class文件中,但会被VM丢弃(默认)
20 //RetentionPolicy.RUNTIME:内存中的字节码,VM将在运行时也保留注解,因此可以通过反射机制读取注解的信息
21
22 //@Target元注解,默认值为任何元素,表示该注解用于什么地方。可用的ElementType参数包括
23 //ElementType.CONSTRUCTOR: 构造器声明
24 //ElementType.FIELD: 成员变量、对象、属性(包括enum实例)
25 //ElementType.LOCAL_VARIABLE: 局部变量声明
26 //ElementType.METHOD: 方法声明
27 //ElementType.PACKAGE: 包声明
28 //ElementType.PARAMETER: 参数声明
29 //ElementType.TYPE: 类、接口(包括注解类型)或enum声明
30
31 //@Documented将注解包含在JavaDoc中
32
33 //@Inheried允许子类继承父类中的注解
34
35
36 @Retention(RetentionPolicy.RUNTIME)
37 @Target({ElementType.METHOD, ElementType.TYPE})
38 public @interface MyAnnotation {
39 //为注解添加属性
40 String color();
41 String value() default "我是林计钦"; //为属性提供默认值
42 int[] array() default {1, 2, 3};
43 Gender gender() default Gender.MAN; //添加一个枚举
44 MetaAnnotation metaAnnotation() default @MetaAnnotation(birthday="我的出身日期为1988-2-18");
45 //添加枚举属性
46
47 }
注解测试类AnnotationTest
1 package com.ljq.test;
2
3 /**
4 * 注解测试类
5 *
6 *
7 * @author jiqinlin
8 *
9 */
10 //调用注解并赋值
11 @MyAnnotation(metaAnnotation=@MetaAnnotation(birthday = "我的出身日期为1988-2-18"),color="red", array={23, 26})
12 public class AnnotationTest {
13
14 public static void main(String[] args) {
15 //检查类AnnotationTest是否含有@MyAnnotation注解
16 if(AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)){
17 //若存在就获取注解
18 MyAnnotation annotation=(MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);
19 System.out.println(annotation);
20 //获取注解属性
21 System.out.println(annotation.color());
22 System.out.println(annotation.value());
23 //数组
24 int[] arrs=annotation.array();
25 for(int arr:arrs){
26 System.out.println(arr);
27 }
28 //枚举
29 Gender gender=annotation.gender();
30 System.out.println("性别为:"+gender);
31 //获取注解属性
32 MetaAnnotation meta=annotation.metaAnnotation();
33 System.out.println(meta.birthday());
34 }
35 }
36 }
枚举类Gender,模拟注解中添加枚举属性
1 package com.ljq.test;
2 /**
3 * 枚举,模拟注解中添加枚举属性
4 *
5 * @author jiqinlin
6 *
7 */
8 public enum Gender {
9 MAN{
10 public String getName(){return "男";}
11 },
12 WOMEN{
13 public String getName(){return "女";}
14 }; //记得有“;”
15 public abstract String getName();
16 }
注解类MetaAnnotation,模拟注解中添加注解属性
1 package com.ljq.test;
2
3 /**
4 * 定义一个注解,模拟注解中添加注解属性
5 *
6 * @author jiqinlin
7 *
8 */
9 public @interface MetaAnnotation {
10 String birthday();
11 }