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

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

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();
  }
}

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女扒开腿让男人桶爽动态图片 | 男女男精品网站免费观看 | 午夜影院免费观看视频 | 天天久久综合网站 | 变态人shou交小说 | 免费网站看v片在线香蕉 | 免费观看视频高清在线 | 亚洲人成网站在线观看妞妞网 | 久久精品热在线观看85 | 猛男强攻变sao货 | 天天操天天射天天爽 | 精品视频一区二区三区免费 | 国产玖玖在线观看 | 3x免费高清视频 | 9191视频 | 亚洲福利视频一区 | 国产成人亚洲精品乱码在线观看 | 精品国产日韩亚洲一区在线 | 色综合久久98天天综合 | 98免费视频| 日本视频免费看 | 奇米影视小说 | 男女乱淫真视频播放网站 | 精品女同一区二区三区免费站 | 成年人免费观看视频网站 | 农夫69小说小雨与农村老太 | 日本人成在线视频免费播放 | 四虎在线免费播放 | 日韩一区二区中文字幕 | 亚洲欧美国产精品完整版 | 亚州日韩精品AV片无码中文 | 国产全部理论片线观看 | 久久99re2在线视频精品 | 黑人同学征服教师麻麻 | 22sihu国产精品视频影视资讯 | 石原莉奈adn093店长未婚妻 | 亚洲国产成人精品无码区99 | 97porm自拍视频区原创 | 视频一区在线观看 | 精品国产一区二区三区久久影院 | 日本videossexx日本人 |