參考

概念:java提供了一种原程序中的元素关联不论什么信息和不论什么元数据的途径和方法

JDK内置系统注解

@Override 用于修饰此方法覆盖了父类的方法;

@Deprecated 用于修饰已经过时的方法;

@Suppvisewarnings 用于通知java编译器禁止特定的编译警告。



注解依照执行机制划分

源代码注解:注解仅仅在源代码中存在,编译成.class文件就不存在了;

编译时注解:注解在源代码和.class文件里都存在(例:JDK自带注解);

执行时注解:在执行阶段还起作用,甚至会影响执行逻辑的注解(Autowired);

自己定义注解的元注解

  1. @Target—作用域(constructor(构造方法声明),field(字段声明)。local_variable(局部变量声明),method(方法声明)。package(包声明),parameter(參数声明),type(类,接口声明))
  2. @Retention—生命周期(source:仅仅在源代码显示,编译时会丢弃。

    class:编译时会记录到class中。执行时忽略。runtime:执行时存在。能够通过反射读取)

  3. Inherited—标识注解(同意子类继承)
  4. Documented—生成Javadoc
  5. 若成员仅仅有一个,必须为value,这个參数赋值能够不写value=XXX





成员以无參无异常方式声明。

成员类型是受限的,合法的类型包含原始类型及String,Class,Annotation, Enumeration.

上面用了注解,程序中获得注解信息的方法是反射

Class cls = Class.forName(“”);//使用类载入器载入类

cls.isAnnotationPresent(xx.class);//推断cls这个类上是否有xx的注解,找到类上注解

xx a = (xx)cls.getAnnotation(xx.class);//取得其上的注解

以下附一个实例。是框架怎样使用注解描写叙述參数。

结构图

A.java

package javaBasic;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target({ElementType.PARAMETER ,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface A {
String value();
String name() default "bingone";
int age() default 20;
}

B.java

package javaBasic;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target({ElementType.PARAMETER ,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface B {
String value();
String name() default "bingone"; }

DataClass.java

package javaBasic;

public class DataClass {
public String name;
public int age;
public DataClass(String name, int age) {
super();
this.name = name;
this.age = age;
} }

RunClass.java

package javaBasic;

public class RunClass {
public static void run(@A("str") String str,@B("age")int age){
System.out.println("In run Method str:" + str + "age:" + age);
}
}

TestClass.java

package javaBasic;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
/**
* 通过注解传參数
* @author gg_gogoing
*
*/
public class TestClass {
public static void parseMethod(DataClass data,Object obj,String mthname){
//验证是否有注解
//若有则两种方法:
//1. 在编译时刻已经有了相应的表,查表就可以
//2. 例如以下的遍历方式。 if(obj instanceof RunClass){
String str = null;
int age = 0;
Method [] methods = (Method[])obj.getClass().getMethods();
for(Method method :methods){
if(method.getName().equals(mthname)){
Annotation[][] annotations = method.getParameterAnnotations();
for(Annotation[] tt : annotations){
for(Annotation t:tt){
if(t instanceof A){
str = data.name;
}else if(t instanceof B){
age = data.age;
}
}
}
RunClass.run(str, age);
}
}
}
} public static void main(String[] args) throws Exception, RuntimeException { // 主方法
//不直接传參数,而是将一个类中的数据传入
DataClass dc = new DataClass("gg_gogoing", 20);
parseMethod(dc, new RunClass(), "run"); } }

Java 注解入门实例 && 注解传參的更多相关文章

  1. va注解应用实例 - Annotation, 自定义注解, 注解类规则【转】

    本文介绍了java的自定义注解及注解类编写的规则, 并通过实例来说明下如何使用java的注解. 实例演示了注解在类,构造方法,方法和字段的使用. 可以从这里下载到完成的工程代码: http://dl. ...

  2. java rmi 入门实例

    java rmi 入门实例 (2009-06-16 16:07:55) 转载▼ 标签: java rmi 杂谈 分类: java-基础    java rmi即java远程接口调用,实现了2台虚拟机之 ...

  3. mybatis 详解(三)------入门实例(基于注解)

    1.创建MySQL数据库:mybatisDemo和表:user 详情参考:mybatis 详解(二)------入门实例(基于XML) 一致 2.建立一个Java工程,并导入相应的jar包,具体目录如 ...

  4. Java AIO 入门实例(转)

    Java7 AIO入门实例,首先是服务端实现: 服务端代码 SimpleServer: public class SimpleServer { public SimpleServer(int port ...

  5. java web 入门实例servlet篇(显示后台数据库列表,删除某一条记录并显示)

    编写过程中需要注意的问题: 1.建立eclipse动态web工程时,需要改写编译后class文件的位置,通常情况下是这个位置:/WebContent/WEB-INF/classes 2.配置的页面链接 ...

  6. Java WebService入门实例

    Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务. Web Service的关键技术和规则: 1.XML:描述 ...

  7. 深入理解Java:注解(Annotation)自己定义注解入门

    深入理解Java:注解(Annotation)自己定义注解入门 要深入学习注解.我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前.我们就必须要了解Java为我们提供的元注解和相关定义注解的 ...

  8. MySQL 存储过程传參之in, out, inout 參数使用方法

    存储过程传參:存储过程的括号中.能够声明參数. 语法是 create procedure p([in/out/inout] 參数名  參数类型 ..) in :给參数传入值,定义的參数就得到了值 ou ...

  9. SpringMVC详解(三)------基于注解的入门实例

    前两篇博客我们讲解了基于XML 的入门实例,以及SpringMVC运行的详细流程.但是我们发现基于 XML 的配置还是比较麻烦的,而且,每个 Handler 类只能有一个方法,在实际开发中肯定是不可能 ...

随机推荐

  1. shell set理解

    在spark bin下面load-spark-env.sh脚本里,有以下语句: if [ -f "${user_conf_dir}/spark-env.sh" ]; then # ...

  2. 重新学习Java——对象和类(二)

    上一节回归了如何以面向对象的思想去使用一些Java中的公共类,也设计了一些自己的类并介绍了设计类的基本方法和技巧,这一节我们将继续回顾这些内容,并争取从中获得新的体验和感受. 1. 静态域与静态方法 ...

  3. Asp.net MVC中文件上传的参数转对象的方法

    参照博友的.NET WebApi上传文件接口(带其他参数)实现文件上传并带参数,当需要多个参数时,不想每次都通过HttpContext.Request.Params去取值,就针对HttpRequest ...

  4. opencv识别验证码的教程和资料

    简书教程:https://www.jianshu.com/p/41127bf90ca9 博客园教程(较详细):https://www.cnblogs.com/qqandfqr/p/7866650.ht ...

  5. 在linux下运行mongodb

    一>下载 1.去mongodb官网下拉框中找到 linux =>RHEL 6 => Package Manager: 2.Instructions for installing wi ...

  6. windows2008 rs+sql 2008 下配置站点权限

    几点注意 Windows 2008 iis7.5  1 建立应用程序池 2 文件目录的权限加上 IIS AppPool\应用程序池名称 (找不到直接录入) 3 文件目录要给 IUser权限,不然出错. ...

  7. Shell script之How to write

    Write shell script: 1) Editor like vi or mcedi 2) Set execute permission for your script chmod  perm ...

  8. linux cp复制文件 直接覆盖

    命令: \cp -rf aaaa/* bbbb 复制aaa下的文件到bbb目录

  9. [转载] Linux Futex的设计与实现

    Linux Futex的设计与实现 引子 在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正 ...

  10. Chrome升级后打开新的标签页变样了……

    最近更新Chrome后,打开新的标签页完全变样了,让人不知所措,特别是没有了那个“最近关闭标签页”按钮,这让我抓狂…… PS:Chrome版本号为:29.0.1547.76 m PPS:最新版已无法修 ...