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 ...
随机推荐
- Sublime text 3 快捷键的使用
快捷键的便捷使用: ctr+shift+n:打开新的sublime text ctr+shift+w:关闭sublime text ctr+o:打开 某个文件 ctrl+n:新建一个文本 ctrl+w ...
- 原型prototype
JS对象的比较 由于JS是解释执行的语言,那么代码中出现函数与对象如果重复执行,会创建多个副本 创建一个Person构造函数,要求有name,age,gender,sayHello 代码如下: fun ...
- iOS 获取ssid
- (NSString *)fetchSSIDInfo { NSString *ssid = nil; NSArray *ifs = (__bridge_transfer id)CNCopySuppo ...
- clang -rewrite-objc的使用点滴
➠更多技术干货请戳:听云博客 clang -rewrite-objc的作用是把oc代码转写成c/c++代码,我们常用它来窥探OC的一些秘密. 1.最简单的例子 main.m的代码如下: int mai ...
- 【代码笔记】iOS-检测手机翻转
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...
- Atitit.android js 的键盘按键检测Back键Home键和Menu键事件
Atitit.android js 的键盘按键检测Back键Home键和Menu键事件 1. onKeyDown @Override public boolean onKeyDown(int keyC ...
- iOS 学习资源
这份学习资料是为 iOS 初学者所准备的, 旨在帮助 iOS 初学者们快速找到适合自己的学习资料, 节省他们搜索资料的时间, 使他们更好的规划好自己的 iOS 学习路线, 更快的入门, 更准确的定位的 ...
- iOS 在xib或storyboard里为控件添加圆角、外框和外框颜色
如果要在xib和storyboard里为控件添加圆角和外框宽度,只要这样做就可以 layer.borderWidth 设置外框宽度属性 layer.cornerRadius 设置圆角属性 ...
- GitHub 上有哪些完整的 iOS-App 源码值得参考?
1. Coding iOS 客户端 Coding官方客户端. 笔者强烈推荐的值得学习的完整APP.GitHub - Coding/Coding-iOS: Coding iOS 客户端源代码 2. OS ...
- 基于ruby的watir自动化测试 笔记二
基于ruby的watir自动化测试 笔记一的补充版,新增加了些特殊的控件捕获方法.还在更新中.... attribute_value 获取当前控件的属性 Value = ie.link(:id=> ...