java动态代理框架
/**
* Created by sten on 7/12/16.
*/
public interface Person { void eat() ;
} /**
* Created by sten on 7/12/16.
*/
public class Chinese implements Person { @Override
public void eat() {
System.out.print("eat fish.");
}
} /**
* Created by sten on 7/12/16.
*/
public class InvocationTest implements InvocationHandler { private Person person ; public InvocationTest(Person person) {
this.person = person ;
} @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return method.invoke(person, args);
}
} /**
* Created by sten on 7/12/16.
*/
public class Main { public static void main(String[] args) { Chinese chinese = new Chinese() ; Person person = (Person) Proxy.newProxyInstance(Person.class.getClassLoader(),
new Class[]{Person.class},
new InvocationTest(chinese)); person.eat();
} }
/**
* Created by sten on 7/12/16.
*/
public class SqlMap { private Map<String, String> map = new HashedMap() ; public SqlMap() {
map.put("Class1.method1","select sql1") ;
map.put("Class1.method2","delete sql1") ;
map.put("Class1.method3","update sql1") ;
map.put("Class1.method4","insert sql1") ;
map.put("Class2.method1","select sql2") ;
map.put("Class2.method2","delete sql2") ;
map.put("Class2.method3","update sql2") ;
map.put("Class2.method4","insert sql2") ;
} public String getSql(String classNameMethodName) {
return map.get(classNameMethodName) ;
} }
/**
* Created by sten on 7/12/16.
*/
public interface Class1 { String method1() ; String method2() ; String method3() ; String method4() ;
}
/**
* Created by sten on 7/12/16.
*/
public class InvocationSql implements InvocationHandler { private Class interfaceObject ; private SqlMap sqlMap ; public InvocationSql(Class interfaceObject, SqlMap sqlMap) {
this.interfaceObject = interfaceObject ;
this.sqlMap = sqlMap ;
} @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String key = interfaceObject.getClass().getName() + "." + method.getName() ;
String value = sqlMap.getSql(key) ; return value ;
}
}
/**
* Created by sten on 7/12/16.
*/
public class TargetProxy<T> { public T getTarget(Class<T> interfaceObject, SqlMap sqlMap) { InvocationSql invocationSql = new InvocationSql(interfaceObject, sqlMap) ; return (T)newProxyInstance(interfaceObject.getClassLoader(),new Class[] {interfaceObject},
invocationSql) ;
} }
/**
* Created by sten on 7/12/16.
*/
public class Bitis { public static void main(String[] args) { TargetProxy targetProxy = new TargetProxy() ; Class1 class1 = (Class1) targetProxy.getTarget(Class1.class, new SqlMap()); class1.method1() ;
} }
java动态代理框架的更多相关文章
- Java动态代理——框架中的应用场景和基本原理
前言 之前已经用了5篇文章完整解释了java动态代理的原理,本文将会为这个系列补上最后一块拼图,展示java动态代理的使用方式和应用场景 主要分为以下4个部分 1.为什么要使用java动态代理 2.如 ...
- Java动态代理全面分析
代理模式 解说:给某一个对象提供一个代理,并由代理对象控制对原对象的引用: 代理模式需要以下几个角色: 1 主题:规定代理类和真实对象共同对外暴露的接口: 2 代理类:专门代理真实对象的类: 3 ...
- Java 动态代理作用是什么?
Java 动态代理作用是什么? 1 条评论 分享 默认排序按时间排序 19 个回答 133赞同反对,不会显示你的姓名 Intopass 程序员,近期沉迷于动漫ING 133 人赞同 ① 首先你 ...
- java高级---->Java动态代理的原理
Java动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程 ...
- Java 动态代理机制分析及扩展
Java 动态代理机制分析及扩展,第 1 部分 王 忠平, 软件工程师, IBM 何 平, 软件工程师, IBM 简介: 本文通过分析 Java 动态代理的机制和特点,解读动态代理类的源代码,并且模拟 ...
- [转]Java 动态代理机制分析及扩展
引言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执 ...
- 【转载】Java 动态代理
Java 动态代理 本文为 Android 开源项目源码解析 公共技术点中的 动态代理 部分项目地址:Jave Proxy,分析的版本:openjdk 1.6,Demo 地址:Proxy Demo分析 ...
- 深入浅出Java动态代理
文章首发于[博客园-陈树义],点击跳转到原文深入浅出Java动态代理 代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中,更是有举足轻重的地位.代理 ...
- JAVA 动态代理原理和实现
在 Java 中动态代理和代理都很常见,几乎是所有主流框架都用到过的知识.在面试中也是经常被提到的话题,于是便总结了本文. Java动态代理的基本原理为:被代理对象需要实现某个接口(这是前提),代理对 ...
随机推荐
- Unit Testing, Integration Testing and Functional Testing
转载自:https://codeutopia.net/blog/2015/04/11/what-are-unit-testing-integration-testing-and-functional- ...
- mfc中循环显示图片
UINT CPalmIdentDlg::UpdateCImg(LPVOID p) { struct params *pa = (struct params*)p; int *imgarray = pa ...
- 在图中寻找最短路径-----深度优先算法C++实现
求从图中的任意一点(起点)到另一点(终点)的最短路径,最短距离: 图中有数字的点表示为图中的不同海拔的高地,不能通过:没有数字的点表示海拔为0,为平地可以通过: 这个是典型的求图中两点的最短路径:本例 ...
- Python+requests维持会话
Python+requests维持会话 一.使用Python+requests发送请求,为什么要维持会话? 我们是通过http协议来访问web网页的,而http协议是无法维持会话之间的状态.比如说我们 ...
- 什么是文件存储NAS
阿里云文件存储(Network Attached Storage,简称 NAS)是面向阿里云 ECS 实例.E-HPC 和容器服务等计算节点的文件存储服务. 定义 阿里云文件存储 NAS 是一个可共享 ...
- springboot简易上传下载
1.导入上传下载依赖: <dependency> <groupId>commons-fileupload</groupId> <artifactId>c ...
- 1.2异常处理和服务配置、aop、日志、自定义事件处理
一.异常处理 2.1.数据验证 现在假设说要进行表单信息提交,肯定需要有一个表单,而后这个表单要将数据提交到 VO 类中,所以现在的基本实现如下: 1. 建立一个 Member.java 的 VO 类 ...
- Redis 常用命令整理
哈希表:设置秒中某个字段 HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN EX: 127.0.0.1:6380> hmset set_map LOGD ...
- nginx访问量统计 日常分析
nginx访问量统计 0.查询某个时间段的日志 cat appapi.dayutang.cn.access.log |grep 'POST'|grep '2019:10' > 20191059. ...
- table html
<html><head><title>demo-110101</title><style type="text/css"> ...