- 浏览: 29700 次
- 性别:
- 来自: 北京
文章分类
最新评论
java中元注解有四个:
1.@Retention
2.@Target
3.@Document
4.@Inherited
1.@Retention
:注解保留的位置
@Retention(RetentionPolicy.SOURCE) :
注解保留在源代码中,class文件中不包含,
功能是与编译器交互,用于代码检测。
如@Override,@Suppress Warings。
额外效率损耗发生在编译时
@Retention(RetentionPolicy.CLASS) :
默认的保留策略,注解会在class字节码文件中在,
但运行时无法获得,<br/>这个级别需要添加JVM加载
时候的代理(javaagent),
使用代理来动态修改字节码文件
@Retention(RetentionPolicy.RUNTIME):
注解会在class字节码文件中存在,在运行时可以通
过反射获取到
2.@Target
: 注解的作用目标
@Target(ElementType.FIELD):作用于(定义)字段枚举常量(注解)
@Target(ElementType.TYPE) :作用于(定义)接口、类、枚举、注解(注解)
@Target(ElementType.METHOD) :作用于(定义)方法(注解)
@Target(ElementType.PARAMETER) :作用(定义)方法参数(注解)
@Target(ElementType.CONSTRUCTOR) :作用(定义)构造函数(注解)
@Target(ElementType.LOCAL_VARIABLE):作用(定义)局部变量(注解)
@Target(ElementType.ANNOTATION_TYPE):作用(定义)注解
@Target(ElementType.PACKAGE) :作用包
3.@Document
: 该注解将被包含在javadoc中
4.@Inherited
:说明子类可以继承父类中的该注解
说明:
@interface 是自定义注解的写法,与接口不同
自定义注解可以显示传值,或隐式默认值
例如:
public @interface DoSomething {
public String name() default "write";
}
显示:
@DoSomething(name = "walidake")//可以显式传值进来,此时
name=walidake
public class UseAnnotation {
}
隐式:
@DoSomething//如果不传值,则默认name=我们定义的默认值,即我们上面
定义的"write"
public class UseAnnotation {
}
当注解含有value()时不需要指定具体名称
public @interface DoSomething {
public String value();
public String name() default "write";
}
@DoSomething("walidake")
public class UseAnnotation {
//name的value值
}
“普通注解”只能用来注解“代码”,
而“元注解”只能用来注解 “普通注解”。
注解集成
public class UseInheritedAnnotation{
@UnInheritable
@Inheritable
public static class Super{
}
public static class Sub extends Super {
}
public static void main(String... args){
Super instance=new Sub();
System.out.println(Arrays.toString(instance.getClass().getAnnotations()));
}
}
自定义注解语法格式:
public @interface 注解名 {定义体}
经典案例:mybatis mapper接口的调用实现
以上一般在自定义Field Method Class 注解中使用
5.@Override
:用于标识该方法继承自超类<br/>当父类的方法被删除或修改了,编译器会提示错误信息
6.@Deprecated
:表示该类或者该方法已经不推荐使用<br/>如果用户还是要使用,会生成编译的警告
7.@SuppressWarnings
:用于忽略的编译器警告信息
等等
后续章节(二) mybits 注解模拟
(三) 使用场景分析与举例(Method 模板,节省代码量,简洁,减少重复代码)(Field参数默认值设置,减少重复代码)
1.@Retention
2.@Target
3.@Document
4.@Inherited
1.@Retention
:注解保留的位置
@Retention(RetentionPolicy.SOURCE) :
注解保留在源代码中,class文件中不包含,
功能是与编译器交互,用于代码检测。
如@Override,@Suppress Warings。
额外效率损耗发生在编译时
@Retention(RetentionPolicy.CLASS) :
默认的保留策略,注解会在class字节码文件中在,
但运行时无法获得,<br/>这个级别需要添加JVM加载
时候的代理(javaagent),
使用代理来动态修改字节码文件
@Retention(RetentionPolicy.RUNTIME):
注解会在class字节码文件中存在,在运行时可以通
过反射获取到
2.@Target
: 注解的作用目标
@Target(ElementType.FIELD):作用于(定义)字段枚举常量(注解)
@Target(ElementType.TYPE) :作用于(定义)接口、类、枚举、注解(注解)
@Target(ElementType.METHOD) :作用于(定义)方法(注解)
@Target(ElementType.PARAMETER) :作用(定义)方法参数(注解)
@Target(ElementType.CONSTRUCTOR) :作用(定义)构造函数(注解)
@Target(ElementType.LOCAL_VARIABLE):作用(定义)局部变量(注解)
@Target(ElementType.ANNOTATION_TYPE):作用(定义)注解
@Target(ElementType.PACKAGE) :作用包
3.@Document
: 该注解将被包含在javadoc中
4.@Inherited
:说明子类可以继承父类中的该注解
说明:
@interface 是自定义注解的写法,与接口不同
自定义注解可以显示传值,或隐式默认值
例如:
public @interface DoSomething {
public String name() default "write";
}
显示:
@DoSomething(name = "walidake")//可以显式传值进来,此时
name=walidake
public class UseAnnotation {
}
隐式:
@DoSomething//如果不传值,则默认name=我们定义的默认值,即我们上面
定义的"write"
public class UseAnnotation {
}
当注解含有value()时不需要指定具体名称
public @interface DoSomething {
public String value();
public String name() default "write";
}
@DoSomething("walidake")
public class UseAnnotation {
//name的value值
}
“普通注解”只能用来注解“代码”,
而“元注解”只能用来注解 “普通注解”。
注解集成
public class UseInheritedAnnotation{
@UnInheritable
@Inheritable
public static class Super{
}
public static class Sub extends Super {
}
public static void main(String... args){
Super instance=new Sub();
System.out.println(Arrays.toString(instance.getClass().getAnnotations()));
}
}
自定义注解语法格式:
public @interface 注解名 {定义体}
经典案例:mybatis mapper接口的调用实现
以上一般在自定义Field Method Class 注解中使用
5.@Override
:用于标识该方法继承自超类<br/>当父类的方法被删除或修改了,编译器会提示错误信息
6.@Deprecated
:表示该类或者该方法已经不推荐使用<br/>如果用户还是要使用,会生成编译的警告
7.@SuppressWarnings
:用于忽略的编译器警告信息
等等
后续章节(二) mybits 注解模拟
(三) 使用场景分析与举例(Method 模板,节省代码量,简洁,减少重复代码)(Field参数默认值设置,减少重复代码)
发表评论
-
设计模式之——靠谱的单例模式
2017-10-31 23:44 483修改了一下,还是推一下吧,以前工作中见过很多单例都是存在些 ... -
设计模式之——抽象工厂模式
2017-10-29 23:05 467转载至http://blog.csdn.net/jason05 ... -
设计模式之——简单工厂模式
2017-10-28 04:13 347就是建立一个工厂 ... -
设计模式之——装饰者模式
2017-10-22 22:23 368装饰者模式要点: 1. 装饰着与被装饰者拥有共同 ... -
设计模式之——观察者模式
2017-10-19 00:59 352原摘取至百度百科 简 ... -
设计模式之——策略模式
2017-10-16 20:29 507关于设计模式推荐《Head First 设计模式》 第一次感觉 ... -
静态内部类与非静态内部类的区别
2017-07-20 23:23 547今天看到一本书中举例使用了,静态内部类, 不是太了解 ... -
线程的三种实现方式
2015-05-31 13:13 1612Java线程的三种实现方式: 大家通常了解的是Thread类与 ... -
JDK的动态代理
2015-05-29 00:49 426直接贴代码了, 先理解 ... -
JAVA守护线程
2015-05-20 22:10 599一直以为守护线程,是一个线程对另一个线程的守护(一个服务线 ... -
ReenTrantLock 与synchronized的区别与使用
2015-05-19 21:41 485java锁就Lock与synchronized两种,Ree ... -
经典容器 数组/链表/队列/散列表/映射表,及相关内容的排序方式
2015-05-07 01:13 674Java 经典容器 数组/链表/队列/散列表/映射表,及相 ... -
for(int i=0;i<list.size;i++) 循环为什么慢
2015-05-03 12:32 1743链表循环使用(for int i=0;i<list. ... -
数组与ArrayList
2015-05-03 00:03 539首先纠正 ... -
java泛型学习笔记
2015-04-28 22:59 1836写这个博文的目的:1.校验自己的学习成果的不足,与错误的地 ...
相关推荐
在本案例中,作者创建了三个自定义注解,具体细节虽未详述,但我们可以深入探讨一下Java自定义注解的基本概念、创建过程以及如何进行验证。 首先,我们需要理解Java注解的基本原理。注解是一种元数据,它提供了一种...
java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo...
Java自定义注解是Java编程语言中的一个重要特性,它允许程序员在代码中插入元数据,这些元数据可以被编译器或运行时环境用来执行特定的任务。自定义注解不仅提高了代码的可读性,还简化了代码处理,特别是在框架和库...
Java自定义注解是Java语言中的一个重要特性,它允许我们创建自己的元数据,为代码提供额外的信息。在Java中,注解(Annotation)主要用于编译器检查、代码生成、运行时处理等方面。本文将深入探讨如何通过反射机制来...
"java自定义注解实践" Java 自定义注解实践是 Java 语言中的一项重要特性,它可以使开发者自定义注解,以满足不同的需求。在本文中,我们将详细介绍 Java 自定义注解的概念、特点、实现方式及实践应用。 概念 ----...
在这个“自定义注解实现伪动态传参的小demo”中,我们将探讨如何创建一个自定义注解,以允许在注解中传递类似于动态参数的数据。 首先,自定义注解的定义通常以`@interface`关键字开始,我们可以定义一些元素(也...
Java自定义注解和通过反射获取注解是Java编程中重要的高级特性,它们极大地增强了代码的可读性和可维护性。注解(Annotation)是一种元数据,提供了在编译时和运行时对代码进行标记的方法,而反射(Reflection)则是...
在Java编程中,自定义注解(Annotation)是一种强大的元数据机制,允许程序员在源代码中插入信息,这些信息可以被编译器、IDE或运行时环境用来进行各种处理。自定义注解使得代码更加可读,易于维护,并且可以自动化...
本教程将通过一个超市自动售卖机的例子来详细讲解如何在Java中实现自定义注解。 首先,我们需要了解注解的基本结构。在Java中,注解以`@`符号开头,后面跟着注解的名称。自定义注解的定义类似于接口,但使用`@...
Java自定义注解和Spring的BeanPostProcessor是Java企业级开发中的两个重要概念,它们在构建灵活、可扩展的应用程序中发挥着关键作用。本文将深入探讨这两个话题,并结合源码分析,帮助开发者更好地理解和应用。 ...
Java自定义注解是Java平台提供的一种元编程机制,它允许程序员在代码中插入特定的标记,这些标记可以在编译时或运行时被处理器解析,从而实现特定的功能。自定义注解可以用来增强代码的可读性,简化代码处理,以及...
在Java编程语言中,自定义注解是一种强大的工具,它允许开发者创建自己的元数据,以提供额外的信息或规范代码的特定行为。自定义注解可以应用于类、接口、方法、变量等不同层级,使得代码更加模块化,易于理解和维护...
本文将详细探讨"Excel导入动态校验,自定义注解动态校验"这一主题,旨在帮助你理解和掌握如何在处理Excel数据时进行有效的验证和校验。 首先,Excel导入动态校验是指在将Excel数据导入到系统或数据库时,对数据进行...
3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑...
Java 自定义注解是 Java 语言中的一种重要特性,它可以用于创建文档,跟踪代码中的依赖性,并且可以执行编译时期检查。自定义注解可以让开发者根据需要创建自己的注解,以满足特定的需求。在本文中,我们将详细介绍 ...
Java自定义注解是Java平台提供的一种元数据机制,它允许程序员在代码中添加额外的信息,这些信息可以被编译器、JVM或其他工具在编译时或运行时读取,用于实现各种功能,如代码生成、代码分析、依赖注入等。...
在Java开发中,自定义注解是一种非常强大的工具,它允许我们为代码添加元数据,以便在运行时或编译时进行处理。本示例中,“自定义注解实现拦截SQL”是关于如何通过注解来动态修改执行的SQL语句,以在其中增加特定的...
java 元注解+拦截器实现自定义注解 @CmwAutoWired:自定义依赖注入 注意:注入的接口和实现类需要在同一包名下,注解的是类则无限制 @FieldAnnotation:自定义属性注解 @MethodAnnotation:自定义方法注解 @...
Java自定义注解是Java语言中的一个重要特性,它允许开发者创建自己的元数据,为代码提供额外的信息,这些信息可以被编译器或者运行时环境用来进行特定的处理。自定义注解可以用于代码的编译检查、代码生成、运行时...