Java元注解,简单案例
- 【注解】
程序中有 注释 和注解
* 注释:给开发人员.
* 注解:给计算机看的.
注解使用:学习框架支持注解开发.
- 【JDK提供的注解】
@Override :描述方法的重写.
@SuppressWarnings :压制警告.
@Deprecated :标记过时.
- 自定义注解:
定义一个类:class
定义一个借口:interface
定义一个枚举:enum
定义一个注解:@interface
用法:
@interface MyAnno1{
}
带有属性的注解:
@interface MyAnno2{
int a() default 1;
String b();
// 注解属性的类型:基本数据类型,字符串类型String,Class,注解类型,枚举类型,以及以上类型的一维数组.
// Date d();
Class clazz();
MyAnno3 m3(); // 注解
Color c(); // 枚举
String[] arrs();
}
@MyAnno4("aaa") // 如果属性名称为value 那么使用的时候 value可以省略(只出现这一个value的属性情况下).
public class AnnotationDemo3 {
}
@interface MyAnno4{
String value();
int a() default 1;
}
【自定义注解案例】
注解类
package com.xujingyang.annotation; 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)
public @interface MyTest { }
测试注解类
package com.xujingyang.annotation;
public class Test {
@MyTest
public void f1(){
System.out.println("f1方法执行了~~~~");
}
public void f2(){
System.out.println("f2方法执行了~~~~");
}
@MyTest
public void f3(){
System.out.println("f3方法执行了~~~~");
}
}
主测试类
package com.xujingyang.annotation;
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) throws Exception{
Class clazz=Test.class;
Method[] methods = clazz.getMethods();
for (Method method : methods) {
// method.invoke(clazz.newInstance());
// System.out.println(method.getName());
boolean b = method.isAnnotationPresent(MyTest.class);//判断是否有添加此注解
if(b){
method.invoke(clazz.newInstance());
}
}
}
}
打印结果

案例二,使用注解方式加载获取JDBC连接的参数
注解类
package com.xujingyang.jdbc; 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)
public @interface JDBCInfo {
//定义加载数据库的几种属性,可以用default关键字赋默认值
String DriverClass() default "com.mysql.jdbc.Driver";
String Url();
String User() default "root";
String Pwd() default "root";
}
测试类
package com.xujingyang.jdbc; import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager; public class Conn {
public static void main(String[] args) throws Exception {
System.out.println(getConnection());//打印连接地址,说明成功
} @JDBCInfo(Url="jdbc:mysql://localhost:3306/day16")
public static Connection getConnection() throws Exception{
//加载类的字节码对象
Class<Conn> clazz=Conn.class; //获取此方法
Method method = clazz.getMethod("getConnection"); //获取注解对象
JDBCInfo info = method.getAnnotation(JDBCInfo.class); //获取各个已赋值的属性
String driverClass = info.DriverClass();
String url = info.Url();
String user = info.User();
String pwd = info.Pwd(); //注册驱动
Class.forName(driverClass); //获得连接
return DriverManager.getConnection(url, user, pwd);
}
}
打印结果

注解的简单用法就记这么多了,更深入的研究待以后来搞
Java元注解,简单案例的更多相关文章
- 使用Java元注解和反射实现简单MVC框架
Springmvc的核心是DispatcherServlet来进行各种请求的拦截,进而进行后续的各种转发处理.流程图如下: 说明:客户端发出一个http请求给web服务器,web服务器对http请求进 ...
- Spring注解与Java元注解小结
注解 Annotation 基于注解的开发,使得代码简洁,可读性高,简化的配置的同时也提高了开发的效率,尤其是SpringBoot的兴起,随着起步依赖和自动配置的完善,更是将基于注解的开发推到了新的高 ...
- Java元注解—— @Retention @Target @Document @Inherited
java中元注解有四个: @Retention @Target @Document @Inherited: @Retention:注解的保留位置 @Retention(RetentionPolicy. ...
- Java元注解@Retention规则
@Retention是java当中的一个元注解,该元注解通常都是用于对软件的测试 1.适用方式: @Retention(RetentionPolicy.RUNTIME) @interf ...
- Java 元注解
元注解@Target,@Retention,@Documented,@Inherited * * @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括: * Elemen ...
- Java元注解
元注解是指注解的注解,包括@Retention @Target @Document @Inherited四种. 1.@Retention: 定义注解的保留策略@Retention(RetentionP ...
- java元注解(注解在注解上的注解)
//ElementType.TYPE 给类.接口.枚举上使用 @Target(ElementType.TYPE)//给注解进行注解,表示该注解可以用在什么地方 //@Retention(Retenti ...
- java 导出excel(简单案例)
public class Student { private int id; private String name; private int age; private Date birth; pub ...
- java元注解 @Retention注解使用
@Retention定义了该Annotation被保留的时间长短: 1.某些Annotation仅出现在源代码中,而被编译器丢弃: 2.另一些却被编译在class文件中,注解保留在class文件中,在 ...
随机推荐
- C语言基础一
C语言学习 C语言的特点 语言简单.紧凑.使用方便.灵活 运算符丰富 数据类型丰富 具有结构化的控制语句 语法限制不太严格,程序设计自由度大 C语言允许直接访问物理地址,可以对硬件进行直接操作 生成代 ...
- 配置SSH密码登录
在客户端生成公钥: ssh-keygen –t rsa 生成的公钥默认位置在~/.ssh/目录 把公钥上传到服务器端: scp id_rsa.pub root@ip地址:文件保存路径 cat id_r ...
- vue中的懒加载和按需加载
懒加载 (1)定义:懒加载也叫延迟加载,即在需要的时候进行加载,随用随载. (2)异步加载的三种表示方法: 1. resolve => require([URL], resolve),支持性好 ...
- 201621123014《Java程序设计》第九周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 答: 2. 书面作业 本次作业题集集合 1. List中指定元素的删除(题集题目) 1.1 实验总结.并回答: ...
- 20165210 学习基础和C语言基础调查
20165210 学习基础和C语言基础调查 一.技能学习过程和心得 读了娄老师<做中学>自己还是深有感受的,对于运动.音乐.棋牌都会一点,我觉得做中学可以概括为三点:做,学,学做结合,所谓 ...
- POJ 3071 Football (概率DP)
概率dp的典型题.用dp[j][i]表示第j个队第i场赢的概率.那么这场要赢就必须前一场赢了而且这一场战胜了可能的对手.这些都好想,关键是怎么找出当前要算的队伍的所有可能的竞争对手?这个用异或来算,从 ...
- 70. Climbing Stairs Add to List
You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...
- webpack 故障处理
Webpack 的配置比较复杂,很容出现错误,下面是一些通常的故障处理手段. 一般情况下,webpack 如果出问题,会打印一些简单的错误信息,比如模块没有找到.我们还可以通过参数 --display ...
- ASP.NET MVC 缓存Outputcache (局部动态)
首先说一下需求: 比如我需要对网站首页做缓存,于是在首页对于的Action上贴上了Outputcache,接着问题就来了,首页上的有部分数据是不能做缓存的,比如个人信息,不然,每个人登陆都是看到第一个 ...
- 蓝桥杯 算法训练 ALGO-121 猴子分苹果
算法训练 猴子分苹果 时间限制:1.0s 内存限制:256.0MB 问题描述 秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分.这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果 ...