java注解spring注解 详解_免费下载.doc_第1页
java注解spring注解 详解_免费下载.doc_第2页
java注解spring注解 详解_免费下载.doc_第3页
java注解spring注解 详解_免费下载.doc_第4页
java注解spring注解 详解_免费下载.doc_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基本内置注解Override java中覆写Deprecated的作用是对不应该在使用的方法添加注释,当编程人员使用这些方法时,将会在编译时显示提示信息,它与javadoc里的deprecated标记有相同的功能,准确的说,它还不如javadoc deprecated,因为它不支持参数SuppressWarnings,其参数有:deprecation,使用了过时的类或方法时的警告unchecked,执行了未检查的转换时的警告fallthrough,当 Switch 程序块直接通往下一种情况而没有 Break 时的警告path,在类路径、源文件路径等中有不存在的路径时的警告serial,当在可序列化的类上缺少 serialVersionUID 定义时的警告 finally ,任何 finally 子句不能正常完成时的警告all,关于以上所有情况的警告自定义注释它类似于新创建一个接口类文件,但为了区分,我们需要将它声明为interface,如:public interface NewAnnotation .java中的注解机制2010-04-22 12:42注解(Annotation) 为我们在代码中天界信息提供了一种形式化的方法,是我们可以在稍后某个时刻方便地使用这些数据(通过 解析注解 来使用这些数据)。 注解的语法比较简单,除了符号的使用以外,它基本上与java的固有语法一致,java内置了三种注解,定义在java.lang包中。 Override 表示当前方法是覆盖父类的方法。 Deprecated 表示当前元素是不赞成使用的。 SuppressWarnings 表示关闭一些不当的编译器警告信息。下面是一个定义注解的实例Java代码 package Test_annotation; import java.lang.annotation.Documented; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.ElementType; import java.lang.annotation.RetentionPolicy; /* * 元注解Target,Retention,Documented,Inherited * * Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括: * ElemenetType.CONSTRUCTOR 构造器声明 * ElemenetType.FIELD 域声明(包括 enum 实例) * ElemenetType.LOCAL_VARIABLE 局部变量声明 * ElemenetType.METHOD 方法声明 * ElemenetType.PACKAGE 包声明 * ElemenetType.PARAMETER 参数声明 * ElemenetType.TYPE 类,接口(包括注解类型)或enum声明 * * Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括: * RetentionPolicy.SOURCE 注解将被编译器丢弃 * RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃 * RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。 * * Documented 将此注解包含在 javadoc 中 * * Inherited 允许子类继承父类中的注解 * */ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented Inherited /* * 定义注解 Test * 注解中含有两个元素 id 和 description * description 元素 有默认值 no description */ public interface Test public int id(); public String description() default no description; package Test_annotation;import java.lang.annotation.Documented;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.Target;import java.lang.annotation.ElementType;import java.lang.annotation.RetentionPolicy;/* 元注解Target,Retention,Documented,Inherited* * Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:* ElemenetType.CONSTRUCTOR 构造器声明* ElemenetType.FIELD 域声明(包括 enum 实例)* ElemenetType.LOCAL_VARIABLE 局部变量声明* ElemenetType.METHOD 方法声明* ElemenetType.PACKAGE 包声明* ElemenetType.PARAMETER 参数声明* ElemenetType.TYPE 类,接口(包括注解类型)或enum声明* * Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:* RetentionPolicy.SOURCE 注解将被编译器丢弃* RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃* RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。* * Documented 将此注解包含在 javadoc 中* * Inherited 允许子类继承父类中的注解* */Target(ElementType.METHOD)Retention(RetentionPolicy.RUNTIME)DocumentedInherited/* 定义注解 Test* 注解中含有两个元素 id 和 description* description 元素 有默认值 no description*/public interface Test public int id();public String description() default no description;下面是一个使用注解 和 解析注解的实例Java代码 package Test_annotation; import java.lang.reflect.Method; public class Test_1 /* * 被注解的三个方法 */ Test(id = 1, description = hello method_1) public void method_1() Test(id = 2) public void method_2() Test(id = 3, description = last method) public void method_3() /* * 解析注解,将Test_1类 所有被注解方法 的信息打印出来 */ public static void main(String args) Method methods = Test_1.class.getDeclaredMethods(); for (Method method : methods) /* * 判断方法中是否有指定注解类型的注解 */ boolean hasAnnotation = method.isAnnotationPresent(Test.class); if (hasAnnotation) /* * 根据注解类型返回方法的指定类型注解 */ Test annotation = method.getAnnotation(Test.class); System.out.println(Test( method = + method.getName() + , id = + annotation.id() + , description = + annotation.description() + ); package Test_annotation;import java.lang.reflect.Method;public class Test_1 /* 被注解的三个方法*/Test(id = 1, description = hello method_1)public void method_1() Test(id = 2)public void method_2() Test(id = 3, description = last method)public void method_3() /* 解析注解,将Test_1类 所有被注解方法 的信息打印出来*/public static void main(String args) Method methods = Test_1.class.getDeclaredMethods(); for (Method method : methods) /* * 判断方法中是否有指定注解类型的注解 */ boolean hasAnnotation = method.isAnnotationPresent(Test.class); if (hasAnnotation) /* * 根据注解类型返回方法的指定类型注解 */ Test annotation = method.getAnnotation(Test.class); System.out.println(Test( method = + method.getName() + , id = + annotation.id() + , description = + annotation.description() + ); 输出结果如下: Test( method = method_1 , id = 1 , description = hello method_1 ) Test( method = method_2 , id = 2 , description = no description ) Test( method = method_3 , id = 3 , description = last method )Java之注解文章分类:Java编程注解:也指元数据,在代码中添加信息提供的一种形式化方法。Java SE5内置了三种标准注解:Override,Deprecated,SuppressWarnings.四种元注解:Target,Retention,Documented,Inherited.Target表示可用于什么地方,ElementType包含有:类、接口(包括注释类型)或枚举声明:ElementType.TYPE字段声明(包括枚举常量)ElementType FIELD方法声明 ElementType.METHOD参数声明 ElementType.PARAMETER构造方法声明 ElementType.CONSTRUCTOR局部变量声明 ElementType.LOCAL_VARIABLE注释类型声明 ElementType.ANNOTATION_TYPE包声明 ElementType.PACKAGERetention表示注释的生命周期,RetentionPolicy取值有:SOURCE 编译器要丢弃的注释CLASS 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释RUNTIME 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,可以反射性地读取一 定义注解Useraction注解类Java代码 1. importjava.lang.annotation.ElementType;2. importjava.lang.annotation.Retention;3. importjava.lang.annotation.RetentionPolicy;4. importjava.lang.annotation.Target;5. 6. Retention(RetentionPolicy.RUNTIME)7. Target(ElementType.METHOD,ElementType.TYPE)8. 9. publicinterfaceUseraction10. 11. StringuserName()defaultdavid;12. HobbysgetHobbs()defaultHobbys.程序;13. StringgetUserAddress()default成都高升;14. Stringsex();15. /如注释类只有一个属性:userName,那么就要指明属性:16. /LovePerlovePer()defaultLovePer(userName=Emma);17. /注释类默认属性为:value,可不加属性值,直接输入值就行了18. LovePerlovePer()defaultLovePer(Emma);19. SuppressWarnings(rawtypes)20. ClasscommanyName();21. import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;Retention(RetentionPolicy.RUNTIME)Target(ElementType.METHOD,ElementType.TYPE)public interface Useraction String userName() default david;Hobbys getHobbs() default Hobbys.程序;String getUserAddress() default 成都高升;String sex();/如注释类只有一个属性:userName,那么就要指明属性: /LovePer lovePer() default LovePer(userName=Emma); /注释类默认属性为:value,可不加属性值,直接输入值就行了LovePer lovePer() default LovePer(Emma);SuppressWarnings(rawtypes)Class commanyName();相关类:Java代码 1. publicenumHobbys2. 音乐,3. 电影,4. 小说,5. 程序,6. 游泳7. 8. 9. publicinterfaceLovePer10. /StringuserName();11. Stringvalue();12. 13. 14. publicclassCommanys15. 16. publicCommanys()17. 18. 19. 20. privateStringname=志向信息技术开发公司;21. 22. publicStringgetName()23. returnname;24. 25. 26. publicvoidsetName(Stringname)27. =name;28. 29. 30. 31. 32. publicclassCommanysTwo33. privateStringname=志大信息技术开发公司;34. publicStringgetName()35. returnname;36. 37. publicvoidsetName(Stringname)38. =name;39. 40. publicCommanysTwo()41. 42. 43. public enum Hobbys 音乐,电影,小说,程序,游泳public interface LovePer /String userName();String value();public class Commanys public Commanys() private String name = 志向信息技术开发公司;public String getName() return name;public void setName(String name) = name;public class CommanysTwo private String name = 志大信息技术开发公司;public String getName() return name;public void setName(String name) = name;public CommanysTwo() UseractionTest注解类的测试Java代码 1. importjava.lang.reflect.InvocationTargetException;2. importjava.lang.reflect.Method;3. 4. Useraction(commanyName=Commanys.class,userName=陈国强,getHobbs=Hobbys.电影,getUserAddress=重庆大平,sex=男,lovePer=LovePer(李中)5. publicclassUseractionTest6. 7. SuppressWarnings(rawtypes)8. publicstaticvoidmain(Stringargs)throwsException9. if(UseractionTest.class.isAnnotationPresent(Useraction.class)10. Useractionannotaction=(Useraction)UseractionTest.class.getAnnotation(Useraction.class);11. System.out.print(姓名:+annotaction.userName();12. System.out.print(,爱好:+annotaction.getHobbs();13. System.out.print(,地址:+annotaction.getUserAddress()0);14. System.out.print(,性别:+annotaction.sex();15. System.out.print(,爱人名字:+annotaction.lovePer().value();16. Classclazz=manyName();17. Objectobj=clazz.newInstance();18. java.lang.reflect.Fieldfield=obj.getClass().getDeclaredField(name);19. field.setAccessible(true);20. System.out.println(,公司名字:+field.get(obj);21. 22. helloAnnotion();23. 24. 25. Useraction(commanyName=CommanysTwo.class,userName=陈国轼,getHobbs=Hobbys.小说,getUserAddress=成都双楠,sex=男,lovePer=LovePer(李静)26. publicstaticvoidhelloAnnotion()throwsSecurityException,NoSuchMethodException,NoSuchFieldException,IllegalArgumentException,IllegalAccessException,InstantiationException,InvocationTargetException27. 28. MethodhelloMethod=UseractionTest.class.getMethod(helloAnnotion);29. Useractionannotaction=(Useraction)helloMethod.getAnnotation(Useraction.class);30. if(null!=annotaction)31. System.out.print(姓名:+annotaction.userName();32. System.out.print(,爱好:+annotaction.getHobbs();33. System.out.print(,地址:+annotaction.getUserAddress()0);34. System.out.print(,性别:+annotaction.sex();35. System.out.print(,爱人名字:+annotaction.lovePer().value();36. SuppressWarnings(rawtypes)37. Classclazz=manyName();38. Objectobj=clazz.newInstance();39. Methodmethod=obj.getClass().getDeclaredMethod(getName);40. method.setAccessible(true);41. System.out.print(,公司名字:+method.invoke(obj);42. 43. 44. import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;Useraction(commanyName=Commanys.class,userName=陈国强,getHobbs=Hobbys.电影,getUserAddress=重庆大平,sex=男,lovePer=LovePer(李中)public class UseractionTest SuppressWarnings(rawtypes)public static void main(String args) throws Exceptionif(UseractionTest.class.isAnnotationPresent(Useraction.class)Useraction annotaction = (Useraction)UseractionTest.class.getAnnotation(Useraction.class);System.out.print(姓名:+annotaction.userName();System.out.print(,爱好:+annotaction.getHobbs();System.out.print(,地址:+annotaction.getUserAddress()0);System.out.print(,性别:+annotaction.sex();System.out.print(,爱人名字:+annotaction.lovePer().value();Class clazz = manyName();Object obj = clazz.newInstance();java.lang.reflect.Field field = obj.getClass().getDeclaredField(name);field.setAccessible(true);System.out.println(,公司名字:+field.get(obj);helloAnnotion();Useraction(commanyName=CommanysTwo.class,userName=陈国轼,getHobbs=Hobbys.小说,getUserAddress=成都双楠,sex=男,lovePer=LovePer(李静)public static void helloAnnotion() throws SecurityException, NoSuchMethodException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, InstantiationException, InvocationTargetExceptionMethod helloMethod = UseractionTest.class.getMethod(helloAnnotion);Useraction annotaction = (Useraction)helloMethod.getAnnotation(Useraction.class);if(null != annotaction)System.out.print(姓名:+annotaction.userName();System.out.print(,爱好:+annotaction.getHobbs();System.out.print(,地址:+annotaction.getUserAddress()0);System.out.print(,性别:+annotaction.sex();System.out.print(,爱人名字:+annotaction.lovePer().value();SuppressWarnings(rawtypes)Class clazz = manyName();Object obj = clazz.newInstance();Method method = obj.getClass().getDeclaredMethod(getName);method.setAccessible(true);System.out.print(,公司名字:+method.invoke(obj);高阶Java-Java注解 Java annotation 使用详解文章分类:Java编程高阶Java-Java注解 Java annotation 使用详解文章分类:Java编程来越的开源框架都提供了“元数据”支持了。为了不outdate,今天系统学习一下Java的注释(又叫元数据)。本文将遵循以下的结构布局1.什么是元数据?有什么作用2.Java的“注释”3.在Java中定义自己的注释4.总结一下-开始-1.什么是元数据,有什么作用?元数据,就是“关于数据的数据”。功能也有很多啦。你可能用过Javadoc的注释自动生成文档。这就是元数据功能的一种。总的来说,元数据可以用来创建文档,跟踪代码的依赖性,执行编译时格式检查,代替已有的配置文件(如Hibernate也提供了注释配置)注释有3中基本类型a.标记注释 -没有变量,只有名称标识。例如 annotationb.单一值注释 -在标记注释的基础上提供一段数据。如 annotation(“data”)c.完整注释 -可以包括多个数据成员,每个数据成员由名称和值构成。 annotation(val1=data1,val2=data2)2.Java的“注释”Java中提供3个内置注释类型a. Override ,只能用于方法(不能用于类,包声明或者其他构造) 作用:可以保证编译时候Override函数的声明正确性 用法:Override public 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将在运行时也保留注释,因此可以通过反射机制读取注释的信息。Documented 将注释包含在JavaDoc中Inheried 允许子类继承父类中的注释。3. 在Java中定义自己的注释Java语言支持一种新的类型-注释类型(annotation type),跟普通类差不多,在类中以符号( )的形式注释其他 Java 代码下面将通过一个简单的例子来实现(代码是Brett McLaughlin 的)interface 申明i.简单的注释类型package com.oreilly.tiger.ch06;/* Marker annotation to indicate that a method or class* is still in progress.*/public interface InProgress ii.使用定制的注释类型com.oreilly.tiger.ch06.InProgresspublic void calculateInterest(float amout,float rate) /Need to finish this method lateriii.添加成员package com.oreilly.tiger.ch06;/* Marker annotation to indicate that a method or class* is still in progress.*/public interface InProgress String value(); com.oreilly.tiger.ch06.InProgressTODO(Figure out the amount of interest per month)/或者TODO(value=Figure out the amount of interest per month)public void calculateInterest(float amount,float rate)iv.设置默认值package com.oreilly.tiger.ch06;public interface GroupTODO public enum Serverity CRITICAL,IMPORTANT,IRIVIAL,DOCMENTATION ; Severity severity() default Severity.IMPORTANT; String item (); String assignedTo(); String dateAssigned();v.使用默认值com.oreilly.tiger.ch06.InProgressGroupTODO(item=Figure out the amount of interest per month,assignedTo = Brett McLaughlin,dateAssigned = 08/04/2004)public void calculateInterest(float amount, float rate) /Need to finish this method latervi.改写默认值com.oreilly.tiger.ch06.InProgressGroupTODO severity = GroupTODO.Severity.DOCUMENTATION, item = Need to explain how this rather unusal method works, assignedTo = Jon Stevens, dateAssigned = 07/30/2004【转至】:/janeky/archive/2009/09/19/4570541.aspx核心提示:注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。 Java基础-学习使用Annotation注解对象注解(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论