注解(Annotation)
什么是注解?
- Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。
注解的语法比较简单,除了@符号的使用以外,它基本上与java的固有语法一致,java内置了三种
注解,定义在java.lang包中。
@Override表示当前方法是覆盖父类的方法。
@Deprecated表示当前元素是不赞成使用的。
@SuppressWarnings表示关闭一些不当的编译器警告信息。
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,
以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。
标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
注解的应用结构:
注解类:
@interface A
{}
应用了“注解类”的类:
@A
Class B
{}
对“应用了‘注解类’的类”进行反射操作的类:
Class C
{
B.class.isAnnotionPresent(A.class);
A a = B.class.getAnnotion(A.class);
}
自定义注解及其应用
·定义一个最简单的注解:
public @interface MyAnnotation {}
·把它加在某个类上:
@MyAnnotation
public class AnnotationTest{}
·用反射进行测试AnnotationTest的定义上是否有@MyAnnotation
·@Retention元注解(注解的注解):
三种取值:
RetetionPolicy.SOURCE --> java源文件
RetetionPolicy.CLASS(默认) --> class文件(默认)
RetetionPolicy.RUNTIME --> 内存中的字节码
@SuppressWarnings、@Deprecated和@Override这三个注解的属性值分别为:
@SuppressWarnings --> RetetionPolicy.SOURCE
@Deprecated --> RetetionPolicy.RUNTIME
@Override --> RetetionPolicy.SOURCE
·@Target元注解:
默认值为任何元素,设置Target等于ElementType.METHOD,原来加在类上的注解就报错了,改为用数组方式设置{ElementType.METHOD,ElementType.TYPE}就可以了。
·元注解以及其枚举属性值不用记,只要会看jdk提供那几个基本注解的API帮助文档的定义或其源代码,按图索骥即可查到,或者直接看java.lang.annotation包下面的类。
为注解增加基本属性
·什么是注解的属性:
一个注解相当于一个胸牌,如果你胸前贴了胸牌,就是传智播客的学生,否则,就不是。如果还想区分出是传智播客哪个班的学生,这时候可以为胸牌在增加一个属性来进行区分。加了属性的标记效果为:@MyAnnotation(color="red")
·定义基本类型的属性和应用属性:
在注解类中增加String color();
@MyAnnotation(color="red")
·用反射方式获得注解对应的实例对象后,再通过该对象调用属性对应的方法:
MyAnnotation a = (MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);
System.out.println(a.color());
可以认为上面这个@MyAnnotation是MyAnnotaion类的一个实例对象。
·为属性指定缺省值:
String color() default "yellow";
·value属性:
String value() default "zxx";
如果注解中有一个名称为value的属性,且你只想设置value属性(即其他属性都采用默认值或者你只有一个value属性),那么可以省略value=部分,例如:@MyAnnotation("lhm")。
为注解增加高级属性
·数组类型的属性
int [] arrayAttr() default {1,2,3};
@MyAnnotation(arrayAttr={2,3,4})
如果数组属性中只有一个元素,这时候属性值部分可以省略大括号。
·枚举类型的属性
EnumTest.TrafficLamp lamp();
@MyAnnotation(lamp=EnumTest.TrafficLamp.GREEN)
·注解类型的属性
MetaAnnotation annotationAttr() default @MetaAnnotation("xxxx");
@MyAnnotation(annotationAttr=@MetaAnnotation(“yyy”) )
可以认为上面这个@MyAnnotation是MyAnnotaion类的一个实例对象,同样的道理,可以认为上面这个@MetaAnnotation是MetaAnnotation类的一个实例对象,调用代码如下:
MetaAnnotation ma = myAnnotation.annotationAttr();
System.out.println(ma.value());
·注解的详细语法可以通过看java语言规范了解,即看java的language specification
分享到:
相关推荐
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490899
commons-logging-1.1.3,spring-test-4.0.0.RELEASE,spring-aop-4.0.0.RELEASE,spring-aspects-4.0.0.RELEASE
javax.annotation-3.1.2.2-sources.jar,javax.annotation-3.1.2.2.jar无分共享
注解、声明,@Resource注解所在的包
001-Servlet-学习内容介绍~1....014-Servlet-服务器的设置及WebServlet注解.mp4 015-Servlet-Servlet的工作流程.mp4 016-Servlet-Servlet的实现方式.mp4 017-Servlet-Servlet的生命周期.mp4 018-Servlet-HttpServletR
01.权限管理概述.avi 02.shiro认识.avi 03.使用ini完成认证.avi 04.shiro登录登出流程分析.avi 05.自定义realm登录登出.avi ...23.spring集成-静态注解授权_补充.avi 24.spring集成-权限-角色-用户关系分析.a
JDK9及以上版本没有javax.annotation-api-***.jar包 ,无法使用注解:@Resource JDK新特性,高版本JDK没有自带的javax(java扩展包)了。或者是使用的JDK不完整。 下载javax.annotation.jar包,导入到lib文件夹下,...
多个类注解@XStreamAlias,value相同、且在集合上使用了@XStreamImplicit会出现异常: com.thoughtworks.xstream.converters.ConversionException: No field 'null' found in class '.....(注解的类路径)' ---- ...
这里zip压缩包囊括了学习Spring过程中用到的所有的jar包; 有: ...spring-web-4.1.2.RELEASE.jar //aop注解需要 对于Spring环境的插件,你们可以到Eclipase中的help>Eclipse marketplace...去搜索安装
org.springframework.context.support-3.0.5.RELEASE.jar
MVC框架,加注解,Struts框架的思想,动态代理,线程管理对象ThreadLocal,Connection对象池,Properties文件读取,EL表达式,JSTL,JavaBean,Java访问MySQL数据库,增删改查... ---------------------------------...
---注解---.xmind Java常用各种注解
这是TPM 2.0 的完整规范文档,包括代码注解。 TPM-Rev-2.0-Part-1-Architecture-01.38 TPM-Rev-2.0-Part-2-Structures-01.38 TPM-Rev-2.0-Part-3-Commands-01.38 TPM-Rev-2.0-Part-3-Commands-01.38-code TPM-Rev-...
Eclipse-SpringBoot框架-注解介绍.docxEclipse-SpringBoot框架-注解介绍.docx
15.3.1. @Pre 和@Post 注解 15.3.1.1. 访问控制使用@PreAuthorize 和@PostAuthorize 15.3.1.2. 过滤使用@PreFilter 和@PostFilter 16. acegi 到spring security 的转换方式 16.1. Spring Security 是什么 ...
jackson工具包,reseponsebody注解所需支持jar包,json自动序序列化
│ 104-在切面中获取自定义注解-1.mp4 │ 105-完善通知类-1.mp4 │ 106-druid监控中心的配置-1.mp4 │ 11-逻辑语句-1.mp4 │ 12-计算属性-1.mp4 │ 13-使用class绑定样式-1.mp4 │ 14-使用style绑定样式-1.mp4 │ 15...
可以通过注解方式声明如(@JSON(name="newName")) 注意:要导入import com.googlecode.jsonplugin.annotations.JSON; 4. 获取json中的数据可以通过访问对象的方式 如:json_targer.attributeName 访问...
@Resource注解所在的jar包 与@Autowired不同的是此注解是ByName进行依赖注入的
JAVA设计模式--程序设计--反射--注解--泛型