zoukankan
html css js c++ java
最简单的动态代理实例(spring基于接口代理的AOP原理)
JDK的动态代理是基于接口的
package
com.open.aop;
public
interface
BusinessInterface
{
public
void
processBusiness();
}
目标对象
package
com.open.aop;
public
class
BusinessObject
implements
BusinessInterface
{
public
void
processBusiness()
{
System.out.println(
"
action
"
);
}
}
代理对象
package
com.open.aop;
import
java.lang.reflect.InvocationHandler;
import
java.lang.reflect.Method;
import
java.lang.reflect.Proxy;
public
class
LogHandler
implements
InvocationHandler
{
private
Object delegate;
public
Object binder(Object delegate)
{
this
.delegate
=
delegate;
return
Proxy.newProxyInstance(delegate.getClass().getClassLoader(),
delegate.getClass().getInterfaces(),
this
);
}
public
Object invoke(Object proxy, Method method, Object[] args)
throws
Throwable
{
Object obj
=
null
;
System.out.println(
"
对象方法调用前
"
);
try
{
obj
=
method.invoke(delegate, args);
}
catch
(Exception e)
{
}
System.out.println(
"
对象方法调用后
"
);
return
obj;
}
}
测试类
package
com.open.aop;
import
java.lang.reflect.InvocationHandler;
import
java.lang.reflect.Proxy;
public
class
Test
{
public
static
void
main(String[] args)
{
BusinessInterface bi
=
(BusinessInterface)
new
LogHandler()
.binder(
new
BusinessObject());
bi.processBusiness();
}
}
输出结果
对象方法调用前
action
对象方法调用后
查看全文
相关阅读:
第三章 运算符与表达式
python 第二章 对象与类型
线段树区间染色+注意事项
ACM-ICPC北京赛区2018重现赛 A题
删除元组
修改元组
访问元组
Python 元组
Python List sort()方法
hdu4501——小明系列故事——买年货(多维背包)
原文地址:https://www.cnblogs.com/shaohz2014/p/3582151.html
最新文章
正式开放 | 阿里云 10 亿级镜像服务正式支持 Helm Charts,云原生交付再加速!
分布式应用的未来 — Distributionless
云原生生态周报 Vol. 14 | K8s CVE 修复指南
联合 CNCF 共同出品:Kubernetes and Cloud Native Meetup 成都站
151. Reverse Words in a String
201. Bitwise AND of Numbers Range
318. Maximum Product of Word Lengths
223. Rectangle Area
268. Missing Number
342. Power of Four
热门文章
326. Power of Three
231. Power of Two
260. Single Number III
187. Repeated DNA Sequences
网络流前向星模板
[Gym-100625J] 搜索
sg函数&&子状态的讨论
线段树区间覆盖和区间累加的区别
次小生成树 克鲁斯卡尔
第八章 编程题
Copyright © 2011-2022 走看看