目录

1. 特点

  • 注释:给程序员阅读使用
  • 注解:给编译器阅读使用

2.优点

  • 简化配置文件
  • 灵活方便

3. 源注解-部分

//修饰范围
@Target({ElementType.TYPE, //类
ElementType.FIELD, //字段
ElementType.METHOD, //方法
ElementType.PARAMETER, //参数
ElementType.CONSTRUCTOR, //构造
ElementType.LOCAL_VARIABLE}) //局部变量
//有效范围
@Retention(value = RetentionPolicy.SOURCE) //Annotation只保留在源代码中,编译器直接丢弃这种Annotation。
@Retention(value = RetentionPolicy.CLASS) //编译器把Annotation记录到class文件中,当运行Java程序时候,JVM不能获取Annotation信息,这个是默认值。
@Retention(value = RetentionPolicy.RUNTIME) //编译器把Annotation记录到class文件中,当运行Java时,JVM也可以获取Annotation信息,程序可以通过反射获取该Annotation信息。

4.自定义注解

  • 自定义注解关键字:@interface
  • 注解使用时候注意只能定义方法
  • 注解可以用default来写默认值
  • 注解方法不能有实体
  • 只有一个属性时候可以不写名称
package per.liyue.code.teset;
/*
* 注解的使用
*/
public @interface MyAn {
//数字
int id();
//字符
String name();
//默认值
String com() default "";
//默认值
long time() default 9L;
//数组
int[] a();
//字符串数组
String[] ss();
//如果只有一个熟悉,且名字为value时候可以不写名称
//String value();
}
package per.liyue.code.teset;
/*
* 一个注解的例子
*/
//注解可以写到这里
@MyAn(id=1, name="hah", a={1, 2}, ss={"aa", "bb"})
public class demo1 {
//需要将注解内容都写出来
@MyAn(id=1, name="hah", com="sss", time=8l, a={1, 2}, ss={"aa", "bb"})
public void Fun(){} //某些注解使用默认值
@MyAn(id=1, name="hah", a={1, 2}, ss={"aa", "bb"})
public void Fun1(){} }

5.使用注解获

Demo:

package per.liyue.code.annotion_demo;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
/*
* 自定义注解
*/
//修饰范围
@Target({ElementType.TYPE, //类
ElementType.FIELD, //字段
ElementType.METHOD, //方法
ElementType.PARAMETER, //参数
ElementType.CONSTRUCTOR, //构造
ElementType.LOCAL_VARIABLE}) //局部变量
//有效范围
//@Retention(value = RetentionPolicy.SOURCE) //Annotation只保留在源代码中,编译器直接丢弃这种Annotation。
//@Retention(value = RetentionPolicy.CLASS) //编译器把Annotation记录到class文件中,当运行Java程序时候,JVM不能获取Annotation信息,这个是默认值。
@Retention(value = RetentionPolicy.RUNTIME) //编译器把Annotation记录到class文件中,当运行Java时,JVM也可以获取Annotation信息,程序可以通过反射获取该Annotation信息。
public @interface Person {
int age() default 20;
String name() default "叫啥来";
}
package per.liyue.code.annotion_demo;
/*
* 使用注解的类
*/
public class Employee {
@Person(age = 30, name = "张三")
public void funE(){ }
}
package per.liyue.code.annotion_demo;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
import org.junit.Test;
/*
* 获取注解使用注解
*/
public class UsePerson {
@Test
public void Fun() throws NoSuchMethodException, SecurityException, ClassNotFoundException{
/*
* 获取注解信息
*/
//先获取到类
//Class clazz = Class.forName("per.liyue.code.annotion_demo.Employee");
Class clazz = Employee.class; //获取到方法
Method m = clazz.getMethod("funE"); //获取方法上的注解
Person p = m.getAnnotation(Person.class); //输出
System.out.println("这个员工的年龄:" + p.age() + " 名字:" + p.name());
}
}

28.注解2.md的更多相关文章

  1. 28.Hibernate-HQL查询.md

    目录 1.概述 2.HQL实例 3.Criteria 查询 4.SQL本地查询 5.分页 1.概述 1)Get/load主键查询 2)对象导航查询 3)HQL查询, Hibernate Query l ...

  2. git基本用法

    基本用法(下)           一.实验说明 本节实验为 Git 入门第二个实验,继续练习最常用的git命令. 1.1 实验准备 在进行该实验之前,可以先clone一个练习项目gitproject ...

  3. 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)

    Vue 资源典藏,包括:UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和 ...

  4. k8s环境搭建--基于minik8s方法

    minik8s 安装 关闭selinux.开启ipv6 sudo bash selinux_ipv6.sh 下载kubectl和minikube 下载minikube,因为国外的源被墙了,所以只能用阿 ...

  5. git用法大全

    转载自实验楼,之前有更新过两篇git的文章,毕竟内容太少,而git还有很多更丰富的技能,在实验楼上有一系列全的教程,这里做一下备案.需要时查阅. Git 实战教程 目录 一.实验说明 二.git的初始 ...

  6. Git基本用法2

    二.比较内容 1.比较提交 - Git Diff 现在我们对项目做些修改: $ cd gitproject # 向README文件添加一行 $ echo "new line" &g ...

  7. Vue插件资料

    UI组件element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 iview ★5801 - 基于 Vuejs 的开源 UI ...

  8. Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例

    Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 ...

  9. 接口自动化测试平台 http://120.79.232.23

    接口自动化测试平台 http://120.79.232.23 T Name Latest commit message Commit time .idea 修改自动化用例修改接口时,其他接口信息被删的 ...

随机推荐

  1. CRM 2016 一个IFrame页面,执行另一IFrame页面的函数

    如果IFrame_A  想执行 IFrame_B 中 RefreshSelf() 函数,可以按以下方法写: 此js代码写在 IFrame_A 中 parent.Xrm.Page.getControl( ...

  2. Spring MVC 处理异常

    SpringMVC处理异常: 1 使用@ExceptionHandler注解 只有ModelAndView可以携带错误信息 @ExceptionHandler public ModelAndView ...

  3. HBase数据模型和读写原理

    Hbase的数据模型和读写原理: ​ HBase是一个开源可伸缩的分布式数据库,他根据Google Bigtable数据模型构建在hadoop的hdfs存储系统之上. ​ HBase是一个稀疏.多维度 ...

  4. Elasticsearch的JavaAPI

    获取客户端对象 public class App { private TransportClient client; //获取客户端对象 @Before public void getClinet() ...

  5. winfrom 控件的显示隐藏方法

    使用Panel作为容器 Panel2.Visible = true; //显示 Panel1.Visible = false; //隐藏

  6. 有关cookies与session的详细信息

    COOKIES与SESSION 详细信息参考:https://www.cnblogs.com/linguoguo/p/5106618.html 会话(Session)跟踪是Web程序中常用的技术,用来 ...

  7. SpringBoot项目启用本地Tomcat

    1.修改pom.xml文件,配置<packaging>war</packaging>,使其发布的时候打包成war包 <groupId>com.owlforest&l ...

  8. Spring配置,事务使用

    1.spring redis session超时配置 <bean class="org.springframework.session.data.redis.config.annota ...

  9. [java,2018-02-01] quartz定时任务中时间表达式

    格式: [秒] [分] [小时] [日] [月] [周] [年] 序号  说明   是否必填     允许填写的值                  允许的通配符 1       秒        是 ...

  10. spring初始化相关

    获取applicationContext implements ApplicationContextAware @Override public void setApplicationContext( ...