Java注解的使用
概念:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法。
Java中的常见注解
JDK自带注解:
@Override//覆盖父类的方法
@Deprecated//表示方法过时了
@SuppressWarnings("deprecation")//忽略deprecation警告
常见第三方注解:
Spring : @Autowired @Service @Repository
Mybatis :@InsertProvider @UpdateProvider @Options
注解的分类
按照运行机制分:
1.源码注解:注解只在源码中存在,编译成.class文件就不存在了
2.编译时注解:注解在源码和.class文件中都存在(jdk自带注解)
3.运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解
按照来源分:
1.来自JDK的注解
2.来自第三方的注解
3.我们自己定义的注解
元注解:注解的注解
@Target({ElementType.METHOD,ElementType.TYPE})/**注解的作用域
//CONSTRUCTOR(构造方法声明)、FIELD(字段声明)、LOCAL_VARIABLE(局部变量声明)
//METHOD(方法声明)、PACKAGE(包声明)、TYPE(类、接口)
*/
@Retention(RetentionPolicy.RUNTIME) /**
//声明周期RUNTIME(运行时存在,可以通过反射读取)、
//CLASS(编译时会纪录到class中,运行时忽略)、
//SOURCE(只在源码显示,编译时会丢弃)*/
@Inherited/**允许子类继承注解,对接口无效,对类有效;只继承类的注解,类下的方法的注解无法继承*/
@Documented/**生成javadoc时包含注解*/
public @interface Description{//使用@interface关键字定义注解
/**
* 成员以无参无异常方式声明
* 成员类型是受限的,合法的类型包括原始类型及String,Class,Annotation,Enumeration
* 可以用default为成员指定一个默认的值
* 如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)
* 注解类可以没有成员,没有成员的注解称为标识注解
*/
// String desc();
// String author();
// int age() default 18;
String value();
}
创建注解
public interface Person {
public String name();
@Deprecated
//表示方法过时了
public int age();
}
创建接口
@Description("i am class")
public class Child implements Person {
@Override
@Description("i am method")
public String name() {
return null;
}
@Override
public int age() {
return 0;
}
}
实现接口
public class Test { @SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) {
try {
//1.使用类加载器加载类
Class c = Class.forName("com.wzyy.zujie.Child");
//2.找到类上面的注解,判断这个类com.wzyy.zujie.Child上是否存在Description.class这个注解
boolean isExist = c.isAnnotationPresent(Description.class);
if(isExist){
//3.拿到注解实例
Description d = (Description) c.getAnnotation(Description.class);
System.out.println(d.value());//i am class
}
//4.找到方法上的注解
Method[] ms = c.getMethods();
for(Method m:ms){
//第一种解析方法,判断这个方法上是否存在Description注解
// boolean isMExist = m.isAnnotationPresent(Description.class);
// if(isMExist){
//存在就得到这个方法上的Description注解
// Description d = m.getAnnotation(Description.class);
// System.out.println(d.value());//i am method
// }
//第二种解析方法,得到这个方法上所有的注解,判断是否是Description
Annotation[] as =m.getAnnotations();
for(Annotation a:as){
if(a instanceof Description){
Description d = (Description) a;
System.out.println(d.value());//i am method
} }
} } catch (ClassNotFoundException e) {
e.printStackTrace();
} }
// /**使用注解的语法:@<注解名>(<成员名1>=<成员值1>,<成员名2>=<成员值2>....)*/
// @Description(desc="aaa",author="bb",age=22)
// public String eyeColor(){
// return "red";
// }
}
测试类解析注解
Java注解的使用的更多相关文章
- Java注解
Java注解其实是代码里的特殊标记,使用其他工具可以对其进行处理.注解是一种元数据,起到了描述.配置的作用,生成文档,所有的注解都隐式地扩展自java.lang.annotation.Annotati ...
- 19.Java 注解
19.Java注解 1.Java内置注解----注解代码 @Deprecated //不推荐使用的过时方法 @Deprecated ...
- Java注解入门
注解的分类 按运行机制分: 源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnin ...
- java注解(Annotation)解析
注解(Annotation)在java中应用非常广泛.它既能帮助我们在编码中减少错误,(比如最常见的Override注解),还可以帮助我们减少各种xml文件的配置,比如定义AOP切面用@AspectJ ...
- JAVA 注解的几大作用及使用方法详解
JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...
- attilax.java 注解的本质and 使用最佳实践(3)O7
attilax.java 注解的本质and 使用最佳实践(3)O7 1. 定义pojo 1 2. 建立注解By eclipse tps 1 3. 注解参数的可支持数据类型: 2 4. 注解处理器 2 ...
- paip.java 注解的详细使用代码
paip.java 注解的详细使用代码 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/att ...
- JAVA 注解的几大作用及使用方法详解【转】
java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...
- 框架基础——全面解析Java注解
为什么学习注解? 学习注解有什么好处? 学完能做什么? 答:1. 能够读懂别人写的代码,特别是框架相关的代码: 2. 让编程更加简洁,代码更加清晰: 3. 让别人高看一眼. spring.mybati ...
- Java注解配置
Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.包含在 java.lang.annota ...
随机推荐
- word开发遇到的问题
1.系统不能安装多个office word版本,建议只安装一个2003版本,越完整越好. 2.安装时候ghost系统会遇到问题,由于很多组件没有完整的安装,因此缺少了很多安装时文件保护要进行提醒的dl ...
- AE,按照属性值关系选择要素
if(axMapControl2.LayerCount<=0) { MessageBox.Show("请加载图层后使用该功能","系统提示",Messag ...
- SharePoint 2013 JavaScript 对象判断用户权限
场 景 近期有个场景,判断当前用户对项目有没有编辑权限,使用JavaScript完成,弄了好久才弄出来,分享一下,有需要的自行扩展吧,具体如下: 代 码 function getPermissions ...
- 见见面、聊聊天 - 5月22日晚7点Meetup,三里屯绿树旁酒吧,畅谈云技术和应用
总是邮件.QQ什么的线上聊,让我们见面吧,不怕见光死,呵呵. 我和同事会先抛砖引玉,给大家介绍一下Autodesk几款最新的云技术和解决方案,然后大家就可畅所欲言,自由交流.来自五湖四海的人,为了 ...
- select count(*)和select count(1)
一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的 假如表沒有主键(Primary key), 那么count(1)比count(*)快, 如果有主键的話 ...
- 将Android系统源码导入ecplise
Android系统源码中带有个IDE的配置文件,目录为:development/ide/ 如果要用eclipse导入查看系统源码,则将development/ide/eclipse/.classpat ...
- Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.解决办法
Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...
- ReactiveCocoa学习总结
最近一直断断续续学习关于ReactiveCocoa的知识内容,对于它的一些基础内容将通过本文进行一个总结,主要是一些入门知识 一:RACSignal一些运用 @interface RACSignalT ...
- Xcode 8.1 : Unable to read from device
今天升级了Xcode 8.1,准备在iOS10.0.2的iPhone 6 Plus上调试,提示:Unable to read from device. 查看文件路径:"~/Library/D ...
- View相关知识学习总结
(一)LayoutInflater原理分析 LayoutInflater主要用于加载布局.通常情况下,加载布局的任务都是在Activity中调用setContentView()方法来完成的,该方法内部 ...