使用反射很容易只使用@Audit注释方法,就像JUnit中的测试运行器一样:

public interface Login {

void login(String name, String password);

}

public class LoginImpl implements Login {

@Audit(handler = LoginHandler.class)

public void login(String name, String password) {

System.out.println("login");

}

}

@Audit定义为:

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public @interface Audit {

Class extends Handler> handler();

}

Handler在哪里:

interface Handler {

void handle();

}

class LoginHandler implements Handler {

public void handle() {

System.out.println("HANDLER CALLED!");

}

}

现在真正的代码:

public class LoginFactory {

private static class AuditInvocationHandler implements InvocationHandler {

private final Login realLogin;

public AuditInvocationHandler(Login realLogin) {

this.realLogin = realLogin;

}

public Object invoke(Object proxy, Method method, Object[] args)

throws Throwable {

Method realMethod = realLogin.getClass().getMethod(

method.getName(),

method.getParameterTypes());

Audit audit = realMethod.getAnnotation(Audit.class);

if (audit != null) {

audit.handler().newInstance().handle();

}

return method.invoke(realLogin, args);

}

}

public static Login createLogin() {

return (Login) Proxy.newProxyInstance(

LoginFactory.class.getClassLoader(),

new Class[]{Login.class},

new AuditInvocationHandler(new LoginImpl()));

}

}

@测试:

Login login = LoginFactory.createLogin();

login.login("user", "secret");

login.logout();

输出:

HANDLER CALLED!

login

logout

简单的java程序代码带注释,Java:基于注释的代码注入的简单技术?相关推荐

  1. 编写运行最简单的java程序——使用记事本编写java程序

    编写运行最简单的java程序--使用记事本编写java程序 第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还 ...

  2. 编译运行一个java程序_如何从另一个Java程序编译和运行Java程序

    编译运行一个java程序 Have you ever thought if it's possible to compile and run a java program from another j ...

  3. java女程序员工作_女生适合做java程序员吗 女java程序员好找工作

    女生适合做java程序员吗 女java程序员好找工作?随着IT行业的飞速发展,程序员越来越受到重视,一些性格比较强势的女生,就也想加入到Java程序员的行列,因为他们感觉女生做这样的事情不会比男生差, ...

  4. Stack Overflow : 55.9%的Java程序员想“抛弃”Java

    著名网站StackOverflow每年都会搞一个开发人员的调查,今年有65000名全世界的程序员参与,他们来自于这些地方: 美国和印度的圈圈都很大,加拿大,西欧等国,巴西的圈圈也不小, 中国的圆圈就有 ...

  5. intellij-IDE运行Java程序报错:java: -source 1.5 中不支持 lambda 表达式 有用

    intellij-IDE运行Java程序报错:java: -source 1.5 中不支持 lambda 表达式 2017年12月29日 15:04:15 佛空如水 阅读数:795 报错: 解决: 第 ...

  6. java编译程序的基本命令是什么,【填空题】Java中编译java 程序的命令是 1 ,执行java程序的命令是 java 。...

    [填空题]Java中编译java 程序的命令是 1 ,执行java程序的命令是 java . 更多相关问题 [多选] 下列骨折中属于关节外骨折的是(). [多选] 骨折早期局部的并发症包括(). [多 ...

  7. Java程序CPU飙升排查,找出死循环代码

    windows环境下cpu飙升问题 线上某台runtime机器(windows Server)cpu报警,这种情况初步就是代码里面死循环了,先把机器下线了保证不再有新的任务分配进来,然而cpu使用依然 ...

  8. 一个简单的Java程序:My first Java!

    ** 这是一个简单的Java程序 当我们安装完java,构建好环境变量,安装完Eclipse IDE之后,就可以编写我们的第一个java程序了. 进入Eclipse后,我们先见一个java项目,命名为 ...

  9. api有哪些 javasocket_简单hello/hi程序、分析及Java Socket API与Linux Socket API对比

    1.Socket 定义 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应 ...

  10. linux命令获取本机外网公网ip地址,java程序获取本机外网公网ip地址 代码

    linux命令获取本机外网ip地址 1 直接返回ip 最快 稳定 curl ns1.dnspod.net:6666 curl whatismyip.akamai.com curl icanhazip. ...

最新文章

  1. FFT [TPLY]
  2. 笨方法学python--变量和命名
  3. C#的Timer解析(转)
  4. Linux crontab
  5. 技术员例会记要(一)
  6. python OOP(2)
  7. JSK-136 公式计算【入门】
  8. 强烈推荐大家看这篇文章:iOS开发常用三方库、插件、知名博客等等(特别有用)
  9. sqlmap注入命令大全
  10. ArcGis 地理配准注意事项
  11. 系统安装:双系统启动菜单
  12. 使用kubeadm搭建k8s高可用集群
  13. android系统级别应用开发要点
  14. 大数据分析你不能不懂的6个核心技术
  15. 内边距padding
  16. 使用 ROT13 算法加密解密数据
  17. 谷歌Cartographer的论文研读(一)
  18. 不要瞎折腾,几张思维导图就讲清搜索引擎优化(SEO)核心点
  19. FT232RL制作的USB转uart ttl,rs232,rs485.兼容3.3V及5V接磁珠
  20. GetMessagePeekMessage 和SendMessagePostMessage

热门文章

  1. Go http访问使用代理
  2. Delphi使用经验笔记。
  3. Machine Learning - Coursera week5 Backpropagation in Practice
  4. day 59Bootstrap自带图表和fontawesome图标 导航和导航条 Bootstrap常用插件 sweetalert插件介绍...
  5. 19) maven 项目结构:聚集
  6. centOS restart xinetd
  7. Testing - Codereview Checklist
  8. 小白设计模式:访问者模式
  9. 大数据之-Hadoop3.x_Yarn_工作机制---大数据之hadoop3.x工作笔记0142
  10. Mycat监控_监控平台安装Mycat-web_作为配置中心注册发现用---MyCat分布式数据库集群架构工作笔记0037