动态代理及工厂的简单实现

1.定义用到的接口

public interface Bussiness {
     void doBussiness();
}


public interface Log {
     void before();
     void after();
}

2.定义接口的实现类


public class BussinessImpl implements Bussiness {

 @Override
 public void doBussiness() {
  System.out.println("业务逻辑部分");
 }
 
}

 


public class LogImpl implements Log{

 @Override
 public void before() {
  System.out.println("方法执行之前");
  
 }

 @Override
 public void after() {
  System.out.println("方法执行之后");
  
 }

}

3.这是实现代理最关键的类Handler  需要实现InvocationHandler  重写invoke()方法

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


public class Handler implements InvocationHandler {
 
 private Bussiness target = null;
 private Log log = null;
 
 public void setTarget(Bussiness target){
  this.target =   target;
 }
 
 public void setLog(Log log){
  this.log = log;
 }
 
 @Override
 public Object invoke(Object proxy, Method method, Object[] args)
   throws Throwable {
  log.before();
  Object result = method.invoke(target,args);
  log.after();
  return result;
 }
 
 public Object getProxy(){
  Bussiness buss = (Bussiness)Proxy.newProxyInstance(target.getClass().getClassLoader() ,
    target.getClass().getInterfaces(),this);
  return buss;
 }
 
}

4.工厂类的简单实现


public class Factory {

 /**
  * @param args
  */
 public static void main(String[] args) {
  BussinessImpl impl = new BussinessImpl();
  LogImpl logImpl = new LogImpl();
  
  Handler handler = new Handler();
  handler.setLog(logImpl);
  handler.setTarget(impl);
  
  Bussiness buss = (Bussiness) handler.getProxy();
  buss.doBussiness();

 }

}

 

Bussiness buss = (Bussiness) handler.getProxy();
buss.doBussiness();

当调用代理类的方法时 会调用Handler的invoke()方法。

 @Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
log.before();
Object result = method.invoke(target,args);
log.after();
return result;
}

 

转载于:https://my.oschina.net/u/858272/blog/128408

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值