JDK动态代理

  JDK动态代理

  JDK动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler。

    InvocationHandler是一个接口,通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,

动态将横切逻辑和业务逻辑编制在一起。

     Proxy利用InvocationHandler动态创建一个符合某一接口的实例,生成目标类的代理对象。
     缺点:必须要实现一个或多个接口,一个代理类只能服务一个接口,只针对实现了接口的类

1.接口类 mainFunction

package com.tang.DynamicProxyImp;
public interface mainFunction {
public String message();
}


2.业务类 ServiceImp(实现mianFunction接口)


package com.tang.DynamicProxyImp;
public class ServiceImp implements mainFunction{
@Override
public String message() {
// TODO Auto-generated method stub
return "jarrem";
}

}


3.代理类 DynamicProxy

package com.tang.DynamicProxyImp;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
//InvocationHandler是代理实例的调用处理程序 实现的接口
public class DynamicProxy implements InvocationHandler {
private Object object;
public DynamicProxy(Object object){
this.object=object;
}
//实现加强
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object invoke = method.invoke(object, args);
return ((String)invoke).toUpperCase();
}
}


4.测试类 MyTest

package com.tang.DynamicProxyImp;
import java.lang.reflect.Proxy;
public class MyTest {
public static void main(String args[]){
mainFunction mainfunction=new ServiceImp();
DynamicProxy dynamicProxy = new DynamicProxy(mainfunction);
//返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。
mainFunction proxy=(mainFunction) Proxy.newProxyInstance(
mainfunction.getClass().getClassLoader(), // 定义代理类的类加载器
mainfunction.getClass().getInterfaces(),    //代理类要实现的接口列表
dynamicProxy // 指派方法调用的调用处理程序
);
String message = proxy.message();
System.out.println(message);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值