动态代理

动态代理:

       动态代理,我的理解,效果上 就是对原来的函数 增加处理逻辑,而不改变原来的代码。需要代理的类包括两种方式,一种是有实现接口的类,一种是没有实现接口的类。

      前一种:jdk1.3以后就有实现,后一种通过CGLIB(http://cglib.sourceforge.net)实现。CGLIB的原理是对类的字节码进行修改,重新生成新的字节码(和重新编写代码,编译差不多,区别就是减少了多余的代码);

接口动态代理的例子:

//商业接口

public interface BusinessInterface {
 public void processBusiness();
}

//商业接口实现类

public class BusinessObject implements BusinessInterface {

 private Logger logger = Logger.getLogger(this.getClass().getName());
 public void processBusiness(){
  //business processing
  System.out.println(“here is business logic”);
 }
}  

//动态代理类
public class LogHandler implements InvocationHandler {

 private Logger logger = Logger.getLogger(this.getClass().getName());
  private Object delegate;
  public LogHandler(Object delegate){
   this.delegate = delegate;
  }

 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  Object o = null;
  try {
   logger.info("method stats..." + method);
   o = method.invoke(delegate,args);
   logger.info("method ends..." + method);
  } catch (Exception e){
   logger.info("Exception happends...");
   //excetpion handling.
  }
  return o;
 }
}  

//动态代理调用
BusinessInterface businessImp = new BusinessObject();

InvocationHandler handler = new LogHandler(businessImp);

BusinessInterface proxy = (BusinessInterface) Proxy.newProxyInstance(
 businessImp.getClass().getClassLoader(),
 businessImp.getClass().getInterfaces(),
 handler);

proxy.processBusiness();  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值