如何编写代码来实现内部之间调用拦截
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要介绍"如何编写代码来实现内部之间调用拦截",在日常操作中,相信很多人在如何编写代码来实现内部之间调用拦截问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何编
千家信息网最后更新 2025年01月18日如何编写代码来实现内部之间调用拦截
这篇文章主要介绍"如何编写代码来实现内部之间调用拦截",在日常操作中,相信很多人在如何编写代码来实现内部之间调用拦截问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何编写代码来实现内部之间调用拦截"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
下面是CGLib的原生写法(使用net.sf.cglib.proxy.*包内的类实现)
class Foo {public void fun1(){ System.out.println("fun1"); fun2(); }public void fun2() { System.out.println("fun2"); }}class CGlibProxyEnhancer implements MethodInterceptor{public Object getProxy(Class clazz) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(clazz); enhancer.setCallback(this);return enhancer.create(); }@Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.print("before ");Object result = proxy.invokeSuper(obj,args);return result; }}public class Test {public static void main(String[] args) { CGlibProxyEnhancer pf = new CGlibProxyEnhancer(); Foo foo = (Foo) pf.getProxy(Foo.class); foo.fun1(); }}
打印结果是:
before fun1
before fun2
可以看到,虽然fun2()是通过foo.fun1()调用的,但fun()2依然能被代理。
但如果用Spring AOP那套基本写法的话:
class Foo {public void fun1() {System.out.println("fun1"); fun2(); }public void fun2() {System.out.println("fun2"); }}class Before implements MethodBeforeAdvice {public void before(Method method, Object[] objects, Object o) throws Throwable {System.out.print("before "); }}public class TestCGLib {public static void main(String[] args) { Foo foo = new Foo(); BeforeAdvice advice = new Before(); ProxyFactory pf = new ProxyFactory(); pf.setOptimize(true);//启用Cglib2AopProxy创建代理 pf.setProxyTargetClass(true); pf.setTarget(foo); pf.addAdvice(advice); Foo proxy = (Foo) pf.getProxy(); proxy.fun1(); }}
输出结果是:
before fun1
fun2
可见fun2方法没有被代理。
这个帖子中还说到了如何将cglib中的fun2改为private则最终结果与常规AOP的一样.
到此,关于"如何编写代码来实现内部之间调用拦截"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
之间
代码
学习
结果
代理
写法
方法
更多
帮助
实用
接下来
帖子
常规
文章
理论
知识
篇文章
网站
资料
跟着
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术人员岗位要求
人大政协回复 网络安全
思讯商锐9.5数据库在哪
服务器一插网线就卡了
历史表数据库名称
现在王者荣耀服务器几点关闭
欧盟网络安全产业
网络安全行为感悟
java并发服务器
软件开发什么是系统
网络安全周德阳
git服务器怎么备份
陕西数据库系统自考上机
数据库日志恢复技术有哪些
泰拉瑞亚全新服务器
影视大全服务器异常
各种数据库的比较表格
查看服务器品牌命令
数据库 运算
网络技术与网络营销的关系
数据库设计规范化
网易我的世界服务器32开怎么弄
网络安全不烦恼动画
毕业答辩数据库会问什么
世界各国网络安全建设
游戏哪些数据是放在服务器的
钱包服务器安全等级
电信网络安全信息安全
合肥软件开发怎么样
美国网络技术领先