基于子类的动态代理(使用CBl工具)

编程入门 行业动态 更新时间:2024-10-12 03:25:57

基于<a href=https://www.elefans.com/category/jswz/34/1770793.html style=子类的动态代理(使用CBl工具)"/>

基于子类的动态代理(使用CBl工具)

基于子类的动态代理

       要求:
                 1.被代理类不能是最终类,不能被finaly修饰
                    提供者:第三方 CGlib
                    涉及的类:Enhancer
     

                  2.创建代理对象的方法:
                     create(Class,Callback)

                              参数:
                                       Class: 被代理类的字节码文件对象
                                       Callback:增强的代码,通常都是些一个接口的实现类或匿名内部类,
                                                         我们在使用时一般都是使用Callback接口的子接口:MethodInterceptor

 

 

代码演示:

使用第三方jar包,将CBlib包导入到资源中 (可以到Maven仓库下载)

 

创建一个Actor作为 被代理类

//本类表示演员类
public class Actor{//简单演出public void simpleShow(Integer money) {System.out.println("简单演出一次"+money+"元");}//危险演出public void riskShow(Integer money) {System.out.println("危险演出一次"+money+"元");}
}

 

Test

public class Test {public static void main(String[] args) {//创建演员对象 ,被代理对象Actor a = new Actor();//通过Enhancer.creater() 创建代理对象Actor CglibActor = (Actor)Enhancer.create(a.getClass(), new MethodInterceptor(){/* * 重写MethodInterceptor的 intercept方法* 调用的代理对象的所有方法都会先执行 intercept方法* * 参数:* 		Object proxy:代理对象的引用* 		Method method:被调用的方法对象* 		Object[] args:传递给目标对象的参数* 		MethodProxy proxy2:代理对象的方法*/@Overridepublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy proxy2) throws Throwable {//-----判断money的值:简单演出不低于10000块才演出,危险演出不低于20000才演出--------//获取money的值Integer money = (Integer)args[0];//定义一个null对象  ,接收代理类方法放回的结果,作为invoke方法的返回值Object obj = null;//如果是简单方法if("simpleShow".equals(method.getName())) {//money 不低于10000 才演出if(money>=10000) {/**  method.invoke(obj,args )*   obj  - 从中调用底层方法的对象*   args - 用于方法调用的参数 */obj = method.invoke(a,money);//obj 接收方法的返回值,即使是void也有返回值对象}}//如果是危险方法if("riskShow".equals(method.getName())) {if(money>=20000) {obj = method.invoke(a,money);}}return obj;//invoke 方法会返回值,而返回值void,也是一个Void对象}
});//通过代理对象,调用演员演出CglibActor.simpleShow(5000);CglibActor.riskShow(40000);}
}

 

输出:

危险演出一次40000元

更多推荐

基于子类的动态代理(使用CBl工具)

本文发布于:2023-06-21 09:35:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/815256.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:子类   工具   动态   CBl

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!