Java代理(二)
前面说到了java的静态代理,这次来看看动态代理。
假设有如下接口和实现方法:
package proxy;
public interface Subject {
public void request();
public void response();
}
package proxy;
public class RealSubject implements Subject{
public void request() {
System.out.println("request...");
}
public void response() {
System.out.println("response...");
}
}
然后,需求来了,希望在执行方法前后加某个其他的操作,那么动态代理会这么做:
package proxy.dynamicProxy; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method; public class ProxyHandle implements InvocationHandler{
private Object target;//目标对象
public ProxyHandle(Object target){
this.target = target;
} public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("before...");
Object retrunObj = method.invoke(target, args);
System.out.println("afeter...");
return retrunObj;
}
}
然后客户端的代码会这么写:
package proxy.dynamicProxy; import java.lang.reflect.Proxy; import proxy.RealSubject;
import proxy.Subject; public class DynamicProxyTestMain { public static void main(String[] args) {
RealSubject subject = new RealSubject();
Subject proxySubject = (Subject) Proxy.newProxyInstance(subject
.getClass().getClassLoader(), subject.getClass()
.getInterfaces(), new ProxyHandle(subject));
proxySubject.request(); //proxySubject.response();
} }
从上面的代码页可以看出,一旦接口变了,代理类是不需要做改变的~~
但是java的动态代理依赖于接口,如果现有代码中没有接口怎么办,岂不是不能使用java的动态代理了??
怎么破?使用cglib...
Java代理(二)的更多相关文章
- 浅谈Java代理二:Cglib动态代理-MethodInterceptor
浅谈Java代理二:Cglib动态代理-MethodInterceptor CGLib动态代理特点: 使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生 ...
- java代理的深入浅出(二)-CGLIB
java代理的深入浅出(二)-CGLIB 1.基本原理 CGLIB的原理就是生成一个要代理类的子类,子类重写要代理的类的所有不是final的方法.在子类中拦截所有父类方法的调用,拦截下来交给设置的Me ...
- Java代理全攻略【有瑕疵:字节码生成部分没看到,最后两节没仔细看,累了】
Java代理 1.代理模式 定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象. 其实就是委托.聚合.中间人. 为了保持行为的 ...
- JAVA代理方式使用示例总结
JAVA代理方式使用示例总结 一. 代理方式概括 Java的代理方式主要包含了静态代理,动态代理两种方式,其中,动态代理根据实现的方式不同,又可以划分为jdk动态代理和cglib动态代理. 二. ...
- java代理,手把手交你写java代理
一:常用的java代理模式 一般经常做java开发的知道java的代理模式一共有三种,第一种也就是静态代理,这种用法比较简单,没有什么魔法棒,比较好理解,另外两种分别是JDK代理和cglib代理,他们 ...
- Java EE : 二、图解 Cookie(小甜饼)
目录 Java EE : 一.图解Http协议 Java EE : 二.图解 Cookie(小甜饼) Java EE : 三.图解Session(会话) 概述 一.概述 二.详细介绍Cookie 传输 ...
- 利用JAVA生成二维码
本文章整理于慕课网的学习视频<JAVA生成二维码>,如果想看视频内容请移步慕课网. 维基百科上对于二维码的解释. 二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图 ...
- Java代理模式
java代理模式及动态代理类 1. 代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目 ...
- java 代理的三种实现方式
Java 代理模式有如下几种实现方式: 1.静态代理. 2.JDK动态代理. 3.CGLIB动态代理. 示例,有一个打招呼的接口.分别有两个实现,说hello,和握手.代码如下. 接口: public ...
- java实现二维码
说起二维码,微信好像最先启用,随后各类二维码就开始流行起来了.那什么是二维码呢. 1.什么是二维码?百度一下即可 http://baike.baidu.com/view/132241.htm?fr=a ...
随机推荐
- BZOJ 1719--[Usaco2006 Jan] Roping the Field 麦田巨画(几何&区间dp)
1719: [Usaco2006 Jan] Roping the Field 麦田巨画 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 82 Solved ...
- Python小白学习之路(十三)—【递归调用】
一.递归调用定义 在函数内部,可以调用其他函数. 如果在调用一个函数的过程中直接或间接调用自身本身,则称为递归调用 从某种意义上来说,递归调用可以实现无限循环 二.递归调用的特性 必须有一个明确的结束 ...
- yii2之ActiveForm表单使用
因目前项目并非前后端分离模式,且用到PHP的yii2框架(所有html代码,js较多内嵌在.php文件内多少采用同步提交[喷墨中...]),遂对于前端面上需要用到的yii2小组件一些整理(因是前端若涉 ...
- thuwc2019总结
275,是我的自己的估分 而350,是面试线 就发挥而言,这次的发挥相当糟糕,第一天选择全场打暴力而不打签到题正解,第二天因A题思路想偏造成2h额外时间花费.第二题与第三题之间,我选择了难打的第三题而 ...
- 用postman做接口测试实例
使用postman做接口测试,可以选择请求方式,可以直接输入参数和header,可以编写测试结果的代码,判断是否通过测试 下图为填写接口测试地址.填写接口的参数,点击send发送请求 其中,Param ...
- 马哥Python 开发9期
LVS工作模式: 传输层 会话保持:负载均衡(1) session sticky:同一用户调度固定服务器Source IP:LVS sh算法(对某一特定服务而言)Cookie(2) session r ...
- (转)Mysql常用命令行
原文:http://www.cnblogs.com/TsengYuen/archive/2012/01/11/2319034.html Mysql常用命令行 Mysql经常使用号令行大全 熬头招.my ...
- 【转】asp.net mvc(模式)和三层架构(BLL、DAL、Model)的联系与区别
原文地址:http://blog.csdn.net/luoyeyu1989/article/details/8275866 首先,MVC和三层架构,是不一样的. 三层架构中,DAL(数据访问层).BL ...
- ES6-Array
/* * 数组解构赋值: * ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这种被称为解构. * 示例如下: */ var [a,b,c] = [1,2,3]; console.log ...
- Chapter 3 Phenomenon——7
"Bella? Are you all right?" “贝拉?你还好吗?” "I'm fine." My voice sounded strange. “我还 ...