国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - 輕松掌握J(rèn)ava代理模式

輕松掌握J(rèn)ava代理模式

2020-06-16 11:24趙卓 JAVA教程

這篇文章主要幫助大家輕松掌握J(rèn)ava代理模式,什么是靜態(tài)代理?感興趣的小伙伴們可以參考一下

和大家一起聊一聊java代理模式

1、靜態(tài)代理

1.1靜態(tài)代理的代理類(lèi)和和被代理的類(lèi)都要維護(hù)一個(gè)共同的接口。 

?
1
2
3
public interface IUserDao {
  void save();
}

1.2被代理的類(lèi),目標(biāo)對(duì)象 

?
1
2
3
4
5
6
public class UserDao implements IUserDao{
  @Override
  public void save() {
    System.out.println("-----已經(jīng)保存數(shù)據(jù)!!!------");
  }
}

1.3代理對(duì)象 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class UserDaoProxy implements IUserDao{
  // 接收保存目標(biāo)對(duì)象
  private IUserDao target;
  public UserDaoProxy(IUserDao target) {
    this.target = target;
  }
  @Override
  public void save() {
    System.out.println("開(kāi)始事務(wù)...");
    target.save();       // 執(zhí)行目標(biāo)對(duì)象的方法
    System.out.println("提交事務(wù)...");
  }
}

1.4測(cè)試類(lèi) 

?
1
2
3
4
5
6
7
8
9
public class App {
  public static void main(String[] args) {
    // 目標(biāo)對(duì)象
    IUserDao target = new UserDao();
    // 代理
    IUserDao proxy = new UserDaoProxy(target);
    proxy.save(); // 執(zhí)行的是,代理的方法
  }
}

2、動(dòng)態(tài)代理

2.1同樣的,動(dòng)態(tài)代理也需要完成一個(gè)接口。(同上)

2.2目標(biāo)對(duì)象也是相同的。

2.3只是在代理對(duì)象上有所不同 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class ProxyFactory {
  // 維護(hù)一個(gè)目標(biāo)對(duì)象
  private Object target;
  public ProxyFactory(Object target){
    this.target = target;
  }
  // 給目標(biāo)對(duì)象,生成代理對(duì)象
  public Object getProxyInstance() {
    return Proxy.newProxyInstance(
        target.getClass().getClassLoader(),
        target.getClass().getInterfaces(),
        new InvocationHandler() {
          @Override
          public Object invoke(Object proxy, Method method, Object[] args)
              throws Throwable {
            System.out.println("開(kāi)啟事務(wù)");
            // 執(zhí)行目標(biāo)對(duì)象方法
            Object returnValue = method.invoke(target, args); 
            System.out.println("提交事務(wù)");
            return returnValue;
          }
        });
  }
}

2.4測(cè)試類(lèi) 

?
1
2
3
4
5
6
7
8
9
10
11
12
public class App {
  public static void main(String[] args) {
    // 目標(biāo)對(duì)象
    IUserDao target = new UserDao();
    System.out.println(target.getClass());
    // 給目標(biāo)對(duì)象,創(chuàng)建代理對(duì)象
    IUserDao proxy = (IUserDao) new ProxyFactory(target).getProxyInstance();
    System.out.println(proxy.getClass());
    // 執(zhí)行方法  【代理對(duì)象】
    proxy.save();
  }
}

3、cglib代理

3.1cglib代理不需要完成接口,只需要寫(xiě)被代理的類(lèi)和代理類(lèi)即可,此處被代理類(lèi)同1.2,所以不再編寫(xiě)。

3.2代理類(lèi)有所不同,用到cglib代理模式需要引用spring的核心框架包。 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class ProxyFactory implements MethodInterceptor{
  // 維護(hù)目標(biāo)對(duì)象
  private Object target;
  public ProxyFactory(Object target){
    this.target = target;
  }
  // 給目標(biāo)對(duì)象創(chuàng)建代理對(duì)象
  public Object getProxyInstance(){
    //1. 工具類(lèi)
    Enhancer en = new Enhancer();
    //2. 設(shè)置父類(lèi)
    en.setSuperclass(target.getClass());
    //3. 設(shè)置回調(diào)函數(shù)
    en.setCallback(this);
    //4. 創(chuàng)建子類(lèi)(代理對(duì)象)
    return en.create();
  }
  @Override
  public Object intercept(Object obj, Method method, Object[] args,
      MethodProxy proxy) throws Throwable {
    System.out.println("開(kāi)始事務(wù).....");
    // 執(zhí)行目標(biāo)對(duì)象的方法
    Object returnValue = method.invoke(target, args);
    System.out.println("提交事務(wù).....");
    return returnValue;
  }
}

3.3測(cè)試類(lèi) 

?
1
2
3
4
5
6
7
8
9
10
11
12
public class App {
  public static void main(String[] args) {
    // 目標(biāo)對(duì)象
    UserDao target = new UserDao();
    System.out.println(target.getClass());
    // 代理對(duì)象
    UserDao proxy = (UserDao) new ProxyFactory(target).getProxyInstance();
    System.out.println(proxy.getClass());
    // 執(zhí)行代理對(duì)象的方法
    proxy.save();
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本激情网 | 中文字幕精品一区二区三区精品 | 精品久久久久久久久久久久 | 国产精品久久久久久吹潮 | 亚洲一区二区三区四区五区中文 | 久久99精品国产麻豆婷婷洗澡 | 日韩成人免费视频 | 久久精品中文字幕 | 亚州国产精品视频 | 99久久婷婷国产综合精品电影 | 精品自拍视频 | 午夜看片网站 | 久久久精品在线观看 | 色综合天天天天做夜夜夜夜做 | 日本在线免费看 | 欧美一级网站 | 午夜在线观看视频网站 | 中文日韩在线 | 一区二区中文字幕 | 性色浪潮 | 中文字幕在线电影 | 国偷自产一区二区免费视频 | 午夜夜 | 亚洲乱码国产乱码精品精98午夜 | 亚洲欧美在线视频 | 国产在线观看一区二区三区 | 色综合网在线 | 99re在线| 午夜精品一区二区三区在线观看 | 久久精品国产v日韩v亚洲 | 99福利影院| 国产精品久久久久久久久久东京 | 免费看男女www网站入口在线 | 日韩精品无码一区二区三区 | 九九香蕉视频 | 久久精品一级 | 免费成人福利视频 | 成人午夜性a一级毛片免费看 | 久久久久久成人 | 国产裸体永久免费视频网站 | 91精品国产人妻国产毛片在线 |