一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - JAVA教程 - 輕松掌握Java代理模式

輕松掌握Java代理模式

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

這篇文章主要幫助大家輕松掌握Java代理模式,什么是靜態代理?感興趣的小伙伴們可以參考一下

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

1、靜態代理

1.1靜態代理的代理類和和被代理的類都要維護一個共同的接口。 

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

1.2被代理的類,目標對象 

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

1.3代理對象 

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

1.4測試類 

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

2、動態代理

2.1同樣的,動態代理也需要完成一個接口。(同上)

2.2目標對象也是相同的。

2.3只是在代理對象上有所不同 

?
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 {
  // 維護一個目標對象
  private Object target;
  public ProxyFactory(Object target){
    this.target = target;
  }
  // 給目標對象,生成代理對象
  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("開啟事務");
            // 執行目標對象方法
            Object returnValue = method.invoke(target, args); 
            System.out.println("提交事務");
            return returnValue;
          }
        });
  }
}

2.4測試類 

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

3、cglib代理

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

3.2代理類有所不同,用到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{
  // 維護目標對象
  private Object target;
  public ProxyFactory(Object target){
    this.target = target;
  }
  // 給目標對象創建代理對象
  public Object getProxyInstance(){
    //1. 工具類
    Enhancer en = new Enhancer();
    //2. 設置父類
    en.setSuperclass(target.getClass());
    //3. 設置回調函數
    en.setCallback(this);
    //4. 創建子類(代理對象)
    return en.create();
  }
  @Override
  public Object intercept(Object obj, Method method, Object[] args,
      MethodProxy proxy) throws Throwable {
    System.out.println("開始事務.....");
    // 執行目標對象的方法
    Object returnValue = method.invoke(target, args);
    System.out.println("提交事務.....");
    return returnValue;
  }
}

3.3測試類 

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美成人tv | 国产精品原创永久在线观看 | 精品视频在线免费播放 | 亚洲精品97福利在线 | 国内精品久久久久久久久 | 国产精品国产三级国产专区不 | 精品日韩一区 | 国产在线看片网站 | 热99精品| 王王的视频ivk | 91大神第九部红酒气质女 | 继的朋友无遮漫画免费观看73 | 成人欧美一区二区三区 | 色狠狠色狠狠综合天天 | 成年人视频免费在线播放 | mm在线| 亚洲精品有码在线观看 | 人妖三级| 好大好猛好爽好深视频免费 | 精品在线播放视频 | 国产精品资源在线观看网站 | 久久精品亚洲牛牛影视 | 亚洲免费二区 | 热久久99精品这里有精品 | 日韩精品欧美激情国产一区 | 亚洲国产在线 | 99精品视频只99有精品 | 亚洲干综合 | 涩涩国产精品福利在线观看 | 四虎影视免费观看 | www.91麻豆 | 九色PORNY真实丨国产免费 | 欧美老人与小伙子性生交 | 91制片厂制作果冻传媒破解 | 五月天在线视频观看 | 石原莉奈adn093店长未婚妻 | 国产亚洲精品视频中文字幕 | 91超级碰 | 亚洲午夜精品久久久久久抢 | 亚洲精品福利你懂 | 9 1 视频在线 |