spring的动态代理实现

Host.java
package cn.zys.dynamiproxy;
public class Host implements Rent{
public void rent(){
System.out.println("host房屋出租");
}
@Override
public void oks() {
// TODO Auto-generated method stub
System.out.println("我是最新的增强方法");
}
}
Rent.java
package cn.zys.dynamiproxy;
public interface Rent {
public void rent();
public void oks();
}
ProxyInvocationHandler.java 实现InvocationHandler接口
package cn.zys.dynamiproxy; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; public class ProxyInvocationHandler implements InvocationHandler{ private Object objs; public Object getObjs() {
return objs;
} public void setObjs(Object objs) {
this.objs = objs;
} /*
* 生成代理类
* Loader 定义代理类的加载器
* Interfaces 定义代理类要实现接口的列表
* */
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(), objs.getClass().getInterfaces(), this);
} /*
* proxy 是代理类
* method 代理类的调用处理程序的方法对象
* */
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
log(method.getName());
Object obj = method.invoke(objs, args);
return obj;
} //看房
private void seehouse(){
System.out.println("看房");
} //收中介费
private void frea(){
System.out.println("收取中介费");
} //测试日志
public void log(String methodName){
System.out.println("执行"+methodName+"方法");
}
}
实现类 Men.java
package cn.zys.dynamiproxy; import java.util.ArrayList;
import java.util.List; public class Men {
public static void main(String[] args) {
// Host host = new Host();
// ProxyInvocationHandler pih = new ProxyInvocationHandler();
// pih.setObjs(host);
// Rent rent = (Rent) pih.getProxy();
// rent.rent(); //测试list
ProxyInvocationHandler pih = new ProxyInvocationHandler();
pih.setObjs(new ArrayList());
List list = (List) pih.getProxy();
list.add("haha");
}
}
一个动态代理指某一个业务
一个动态代理可以代理多个类
spring的动态代理实现的更多相关文章
- spring AOP 动态代理和静态代理以及事务
AOP(Aspect Oriented Programming),即面向切面编程 AOP技术,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装 ...
- 解决spring使用动态代理
解决spring使用动态代理类型转换失败的问题--java.lang.ClassCastException: com.sun.proxy.$Proxy$ cannot be cast to ... 转 ...
- Spring AOP 动态代理 缓存
Spring AOP应用:xml配置及注解实现. 动态代理:jdk.cglib.javassist 缓存应用:高速缓存提供程序ehcache,页面缓存,session缓存 项目地址:https://g ...
- spring aop 动态代理批量调用方法实例
今天项目经理发下任务,需要测试 20 个接口,看看推送和接收数据是否正常.因为对接传输的数据是 xml 格式的字符串,所以我拿现成的数据,先生成推送过去的数据并存储到文本,以便验证数据是否正确,这时候 ...
- Spring AOP动态代理原理与实现方式
AOP:面向切面.面向方面.面向接口是一种横切技术横切技术运用:1.事务管理: (1)数据库事务:(2)编程事务(3)声明事物:Spring AOP-->声明事物 2.日志处理:3.安全验证 ...
- Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题
Spring AOP底层的动态代理实现有两种方式:一种是JDK动态代理,另一种是CGLib动态代理. JDK动态代理 JDK 1.3版本以后提供了动态代理,允许开发者在运行期创建接口的代理实例,而且只 ...
- Spring Aop 动态代理失效分析
1. Spring Aop 原理 Spring Aop 通过动态代理创建代理对象,在调用代理对象方法前后做增强. 2. Transactional, Async 注解失效? 当在动态代理方法中调用当前 ...
- Spring CGLlB动态代理
JDK 动态代理使用起来非常简单,但是它也有一定的局限性,这是因为 JDK 动态代理必须要实现一个或多个接口,如果不希望实现接口,则可以使用 CGLIB 代理. CGLIB(Code Generati ...
- Spring JDK动态代理
1. 创建项目在 MyEclipse 中创建一个名称为 springDemo03 的 Web 项目,将 Spring 支持和依赖的 JAR 包复制到 Web 项目的 WEB-INF/lib 目录中,并 ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring CGLlB动态代理
JDK 动态代理使用起来非常简单,但是它也有一定的局限性,这是因为 JDK 动态代理必须要实现一个或多个接口,如果不希望实现接口,则可以使用 CGLIB 代理. CGLIB(Code Generati ...
随机推荐
- IIS6服务器的请求流程(图文&源码)
1.IIS 7开发与管理完全参考手册 http://book.51cto.com/art/200908/146040.htm 2.Web服务IIS 6 https://technet.micro ...
- OpenRASP管理后台安装记录
OpenRASP项目地址https://rasp.baidu.com/ 一.安装java 在CentOS中安装ElasticSearch需要Java1.8.0,可执行命令java -version查看 ...
- TCP 3-Way Handshake
TCP是面向连接的协议,其数据传输过程分为建立连接.数据传送.释放连接三个阶段. 0 建立连接 建立连接的过程也就是常说的"三次握手": 客户端向服务器端发送一个SYN报文(SYN ...
- Acmer 仅以此纪念最痛苦的一天
今天打比赛,完全不在状态,看到别人又AK了,自己心里真TM不是个滋味,我为什么这么弱,菜鸡,每天都在水题,我的人生也是这么水?伪学习?没有学习能力,这不只是队伍的问题,是自己的问题,别人平均3题我们队 ...
- libevent(三)event_base
libevent能够处理三种事件: I/O.定时器.信号. event_base 统一管理所有事件. struct event_base { const struct eventop *evsel; ...
- 龟兔赛跑算法 floyed判环算法
今天写线段树写到要用到这个算法的题目,简单的学习一下. https://blog.csdn.net/javaisnotgood/article/details/89243876 https://blo ...
- Nginx+Uwsgi+Django 项目部署到服务器。
首先先说一下思路: 1.本地django项目打包 主要用到的是 python自带的distutils.core 下的 setup,具体代码在下面,主要讲的两个问题是package主要打包为和目录同级的 ...
- 近期总结的一些Java基础
1.面向过程:当需要实现一个功能的时候,每一个过程中的详细步骤和细节都要亲力亲为. 2.面向对象:当需要实现一个功能的时候,不关心详细的步骤细节,而是找人帮我做事. 3.类和对象的关系: a-类是 ...
- 【Scala】利用akka实现Spark启动通信
文章目录 思路分析 步骤 一.创建maven工程,导包 二.master进程代码开发 三.worker进程代码开发 思路分析 1.首先启动master,然后依次启动worker 2.启动worker时 ...
- 【Hadoop离线基础总结】MapReduce自定义InputFormat和OutputFormat案例
MapReduce自定义InputFormat和OutputFormat案例 自定义InputFormat 合并小文件 需求 无论hdfs还是mapreduce,存放小文件会占用元数据信息,白白浪费内 ...