springMVC里有很多注解 可是我看这些注解 都只是定义一些属性而已,怎么就能实现那么
牛逼的功能呢?
请问java中注解的功能是怎么实现的
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
9条回答
- guxiangfly 2017-01-02 06:48关注
通过自定义注解。。
额。。下面给出一个本菜鸟 写的一个 仿制 junit测试单元的一个 灰常简单的test注解
/** * */ package com.guxiang.test; 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; 首先自定义一个 myTest注解 /** * @author guxiang * @date 2016年12月24日 下午10:22:11 * 自定义的myTest注解 */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.ANNOTATION_TYPE}) public @interface MyTest { long time() default -1; }
写一个类 用于被myTest注解 实现测试
package com.guxiang.test; public class SomeDaoImpl { public void save(){ System.out.println("保存了数据"); } public void update(){ System.out.println("更新了数据"); } }
写一个测试类 这个类 引用myTest注解
package com.guxiang.test; public class SomeDaoImplTest { private SomeDaoImpl dao= new SomeDaoImpl(); /** * 测试添加 */ @MyTest public void testAdd(){ dao.save(); } @MyTest public void testUpdate(){ dao.update(); } }
最关键的 一步 写一个 myTestRunner类 使用反射实现注解的功能 给注解注入灵魂
/** * */ package com.guxiang.test; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * @author guxiang * @date 2016年12月24日 下午10:26:07 */ // 反射注解 public class MyTestRunner { public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException { Class clazz = SomeDaoImplTest.class; Method[] ms = clazz.getMethods(); for (Method method : ms) { boolean hasMyTest = method.isAnnotationPresent(MyTest.class); if (hasMyTest) { method.invoke(clazz.newInstance(), null); } } } }
这个测试类仿制了 junit测试单元
执行MyTestRunner 的main方法 后 会在控制台输出以下保存了数据
更新了数据于此就得到了 测试那个被测试类的功能。。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 8无用
悬赏问题
- ¥15 #MATLAB仿真#车辆换道路径规划
- ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
- ¥15 数据可视化Python
- ¥15 要给毕业设计添加扫码登录的功能!!有偿
- ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
- ¥15 微信公众号自制会员卡没有收款渠道啊
- ¥100 Jenkins自动化部署—悬赏100元
- ¥15 关于#python#的问题:求帮写python代码
- ¥20 MATLAB画图图形出现上下震荡的线条
- ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘