简单的java程序代码带注释,Java:基于注释的代码注入的简单技术?
使用反射很容易只使用@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:基于注释的代码注入的简单技术?相关推荐
- 编写运行最简单的java程序——使用记事本编写java程序
编写运行最简单的java程序--使用记事本编写java程序 第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还 ...
- 编译运行一个java程序_如何从另一个Java程序编译和运行Java程序
编译运行一个java程序 Have you ever thought if it's possible to compile and run a java program from another j ...
- java女程序员工作_女生适合做java程序员吗 女java程序员好找工作
女生适合做java程序员吗 女java程序员好找工作?随着IT行业的飞速发展,程序员越来越受到重视,一些性格比较强势的女生,就也想加入到Java程序员的行列,因为他们感觉女生做这样的事情不会比男生差, ...
- Stack Overflow : 55.9%的Java程序员想“抛弃”Java
著名网站StackOverflow每年都会搞一个开发人员的调查,今年有65000名全世界的程序员参与,他们来自于这些地方: 美国和印度的圈圈都很大,加拿大,西欧等国,巴西的圈圈也不小, 中国的圆圈就有 ...
- intellij-IDE运行Java程序报错:java: -source 1.5 中不支持 lambda 表达式 有用
intellij-IDE运行Java程序报错:java: -source 1.5 中不支持 lambda 表达式 2017年12月29日 15:04:15 佛空如水 阅读数:795 报错: 解决: 第 ...
- java编译程序的基本命令是什么,【填空题】Java中编译java 程序的命令是 1 ,执行java程序的命令是 java 。...
[填空题]Java中编译java 程序的命令是 1 ,执行java程序的命令是 java . 更多相关问题 [多选] 下列骨折中属于关节外骨折的是(). [多选] 骨折早期局部的并发症包括(). [多 ...
- Java程序CPU飙升排查,找出死循环代码
windows环境下cpu飙升问题 线上某台runtime机器(windows Server)cpu报警,这种情况初步就是代码里面死循环了,先把机器下线了保证不再有新的任务分配进来,然而cpu使用依然 ...
- 一个简单的Java程序:My first Java!
** 这是一个简单的Java程序 当我们安装完java,构建好环境变量,安装完Eclipse IDE之后,就可以编写我们的第一个java程序了. 进入Eclipse后,我们先见一个java项目,命名为 ...
- api有哪些 javasocket_简单hello/hi程序、分析及Java Socket API与Linux Socket API对比
1.Socket 定义 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应 ...
- linux命令获取本机外网公网ip地址,java程序获取本机外网公网ip地址 代码
linux命令获取本机外网ip地址 1 直接返回ip 最快 稳定 curl ns1.dnspod.net:6666 curl whatismyip.akamai.com curl icanhazip. ...
最新文章
- FFT [TPLY]
- 笨方法学python--变量和命名
- C#的Timer解析(转)
- Linux crontab
- 技术员例会记要(一)
- python OOP(2)
- JSK-136 公式计算【入门】
- 强烈推荐大家看这篇文章:iOS开发常用三方库、插件、知名博客等等(特别有用)
- sqlmap注入命令大全
- ArcGis 地理配准注意事项
- 系统安装:双系统启动菜单
- 使用kubeadm搭建k8s高可用集群
- android系统级别应用开发要点
- 大数据分析你不能不懂的6个核心技术
- 内边距padding
- 使用 ROT13 算法加密解密数据
- 谷歌Cartographer的论文研读(一)
- 不要瞎折腾,几张思维导图就讲清搜索引擎优化(SEO)核心点
- FT232RL制作的USB转uart ttl,rs232,rs485.兼容3.3V及5V接磁珠
- GetMessagePeekMessage 和SendMessagePostMessage
热门文章
- Go http访问使用代理
- Delphi使用经验笔记。
- Machine Learning - Coursera week5 Backpropagation in Practice
- day 59Bootstrap自带图表和fontawesome图标 导航和导航条 Bootstrap常用插件 sweetalert插件介绍...
- 19) maven 项目结构:聚集
- centOS restart xinetd
- Testing - Codereview Checklist
- 小白设计模式:访问者模式
- 大数据之-Hadoop3.x_Yarn_工作机制---大数据之hadoop3.x工作笔记0142
- Mycat监控_监控平台安装Mycat-web_作为配置中心注册发现用---MyCat分布式数据库集群架构工作笔记0037