老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網站建設、域名注冊、服務器等服務

Java靜態(tài)代理和動態(tài)代理總結

靜態(tài)代理

創(chuàng)新互聯(lián)建站專注于袁州網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供袁州營銷型網站建設,袁州網站制作、袁州網頁設計、袁州網站官網定制、重慶小程序開發(fā)服務,打造袁州網絡公司原創(chuàng)品牌,更為您提供袁州網站排名全網營銷落地服務。

第一種實現(xiàn)(基于接口):

1》接口

public interface Hello {
 void say(String msg);
}

2》目標類,至少實現(xiàn)一個接口

public class HelloImpl implements Hello {
 public void say(String msg) {
  System.out.println("Hi,"+msg);
 }
}

3》代理類(與目標類實現(xiàn)相同接口,從而保證功能一致)

public class HelloProxy implements Hello{
 private Hello hello;
 public HelloProxy(Hello hello){
  this.hello = hello;
 }
 public void say(String msg){
  before();
  hello.say(msg);
  after();
 }
 private void before(){
  System.out.println("Before");
 }
 private void after(){
  System.out.println("After");
 }
}

3》測試

/**
 * @Author LZHL
 * @Create 2017-02-19 10:26
 * @Description
 */
public class Main {
 public static void main(String[] args) throws Exception {
  HelloImpl target = new HelloImpl();
  HelloProxy proxy = new HelloProxy(target);
  proxy.say("LZHL");
 }
}

第二種實現(xiàn)(基于目標類):

1>目標類

public class HelloTarget {
 public void sayHello(String name){
  System.out.println("Hi,"+name);
 }
}

2>代理類(通過繼承目標類,保證功能一致)

public class HelloProxy extends HelloTarget{
  private HelloTarget target;
  public HelloProxy(HelloTarget target){
    this.target = target;
  } 
  @Override
 public void sayHello(String name) {
  this.before();
  target.sayHello(name);
  this.after();
 }
 private void before(){
  System.out.println("Before");
 }
 private void after(){
  System.out.println("After");
 }
}

3>測試

public class Main {
 public static void main(String[] args) throws Exception {
  HelloTarget target = new HelloTarget(); 
    HelloProxy proxy= new HelloProxy(target);
  proxy.sayHello("LZHL");
 }
}

動態(tài)代理

動態(tài)代理的代理類是在程序運行期間動態(tài)生成的,也有兩種實現(xiàn),一種是JDK動態(tài)代理,一種是CGLib動態(tài)代理

1》JDK動態(tài)代理(基于接口實現(xiàn),與目標類實現(xiàn)相同接口,從而保證功能一致)

/**
 * @Author LZHL
 * @Create 2017-02-19 12:46
 * @Description
 */
public class Main {
 public static void main(String[] args){
  final HelloImpl target = new HelloImpl();
  Object proxyInstance = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
   /*
    * proxy: 代理對象
    * method: 目標對象的方法對象
    * args: 目標對象方法的參數(shù)
    * return: 目標對象方法的返回值
    */
   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    System.out.println("before");
    Object retValue = method.invoke(target, args);
    System.out.println("after");
    return retValue;
   }
  });
  Hello proxy = (Hello) proxyInstance;
  proxy.say("LYX");
  //可以把InvocationHandler提取出來,單獨寫一個類,為了方便大家看,這里我用內部類的形式
  class JDKProxy implements InvocationHandler {
   private Object target;
   public JDKProxy(Object target){
    this.target = target;
   }
   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    before();
    Object result = method.invoke(target, args);
    after();
    return result;
   }
   private void before(){
    System.out.println("Before");
   }
   private void after(){
    System.out.println("After");
   }
  }
  InvocationHandler ih = new JDKProxy(target);
  Object proxyInstance2 = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), ih);
  Hello proxy2 = (Hello) proxyInstance2;
  proxy2.say("LZHL");
 }
}

2》CGLib動態(tài)代理(基于目標類,通過繼承目標類,從而保證功能一致),需要導入cglib-3.2.4.jar包

pom.xml


 
 
  cglib
  cglib
  3.2.4
 

1)目標類

public class Hi {
 public void sayHi(String msg){
  System.out.println("Hi,"+msg);
 }
}

2)測試

/**
 * @Author LZHL
 * @Create 2017-02-19 13:19
 * @Description
 */
public class Main {
 public static void main(String[] args) {
  Enhancer enhancer = new Enhancer();
  //設置父類
  enhancer.setSuperclass(Hi.class);
  //設置回調函數(shù)
  enhancer.setCallback(new MethodInterceptor() {
   public Object intercept(Object target, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
    System.out.println("before");
    Object retValue = methodProxy.invokeSuper(target, args);
    System.out.println("after");
    return retValue;
   }
  });
  Object proxy = enhancer.create();
  Hi hi = (Hi) proxy;
  hi.sayHi("LXY");
  //可以把MethodInterceptor提取出來,單獨寫一個類,為了方便大家看,這里我用內部類的形式
  class CGLibProxy implements MethodInterceptor {
   public  T getProxy(Class clazz){
    return (T) Enhancer.create(clazz, this);
   }
   public Object intercept(Object target, Method method, Object[] args, MethodProxy proxy) throws Throwable {
    before();
    Object result = proxy.invokeSuper(target, args);
    after();
    return result;
   }
   private void before(){
    System.out.println("Before");
   }
   private void after(){
    System.out.println("After");
   }
  }
  CGLibProxy cgLibProxy = new CGLibProxy();
  Hi hi2 = cgLibProxy.getProxy(Hi.class);
  hi2.sayHi("LZHL");
 }
}

以上所述是小編給大家介紹的Java靜態(tài)代理和動態(tài)代理總結,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!


分享名稱:Java靜態(tài)代理和動態(tài)代理總結
標題來源:http://www.xueling.net.cn/article/pdeieh.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 刺激一区仑乱 | 中文字幕日韩精品在线观看 | 欧美xxx日本 | 欧美精品网站在线观看 | 国产强被迫伦姧在线观看无码 | 99精品99 | 一区二区三区四区五区在线 | 九九热线视频只有这里最精品 | 欧美性巨大╳╳╳╳╳高跟鞋 | 手机看日韩片 | 亚洲第一区视频 | 日本一级黄 | 狠狠躁天天躁日日躁欧美 | 成全视频在线观看免费高清 | 久久婷婷影院 | 中国大陆一级毛片 | 精品国产乱码久久久久久丨区2区 | 激情信箱免费观看 | 超碰国产欧美人人 | 999精品国产人妻无码系列 | 最近中文字幕完整在线看一 | 免费播放黄色片 | 精品成人佐山爱一区二区 | 婷婷快播 | 99精品国产丝袜在线拍国语 | 日韩精品一区二区三区四 | 亚??合在线一区二区 | 亚洲成A人片在线观看国产 亚洲国产一区自拍 | 国产精品三区在线观看 | 白丝袜美女扒开内衣网站 | 黄色+视频+卡1+国产 | 搜索毛片 | 亚洲欧美综合在线观看 | 性69无遮挡免费视频 | 99热日韩 | omofun动漫在线观看 | 国产亚洲欧洲网友拍 | 亚洲一区二区三区在线影院 | 69av导航| 一级黄色片免费播放 | 在线观看国产黄 |