第一部分、代理模式 
  代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。(其实就是在代理类中关联一个委托类的实例,然后在代理类中进行包装) UML图如下:

代理模式  &  Java原生动态代理技术  &  CGLib动态代理技术

 

代理模式  &  Java原生动态代理技术  &  CGLib动态代理技术

 

第二部分、在Java中实现代理模式 

按照代理的创建时期,代理类可以分为两种。 
  静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 
  动态代理:在程序运行时,运用反射机制动态创建而成。

一、静态代理: 
1、Count.java 

 1 package net.battier.dao;
 2 
 3 /**
 4  * 定义一个账户接口
 5  * 
 6  * @author Administrator
 7  * 
 8  */
 9 public interface Count {
10     // 查看账户方法
11     public void queryCount();
12 
13     // 修改账户方法
14     public void updateCount();
15 
16 }
View Code

2、CountImpl.java

 1 package net.battier.dao.impl;
 2 
 3 import net.battier.dao.Count;
 4 
 5 /**
 6  * 委托类(包含业务逻辑)
 7  * 
 8  * @author Administrator
 9  * 
10  */
11 public class CountImpl implements Count {
12 
13     @Override
14     public void queryCount() {
15         System.out.println("查看账户方法...");
16 
17     }
18 
19     @Override
20     public void updateCount() {
21         System.out.println("修改账户方法...");
22 
23     }
24 
25 }
26 
27 、CountProxy.java
28 package net.battier.dao.impl;
29 
30 import net.battier.dao.Count;
31 
32 /**
33  * 这是一个代理类(增强CountImpl实现类)
34  * 
35  * @author Administrator
36  * 
37  */
38 public class CountProxy implements Count {
39     private CountImpl countImpl;
40 
41     /**
42      * 覆盖默认构造器
43      * 
44      * @param countImpl
45      */
46     public CountProxy(CountImpl countImpl) {
47         this.countImpl = countImpl;
48     }
49 
50     @Override
51     public void queryCount() {
52         System.out.println("事务处理之前");
53         // 调用委托类的方法;
54         countImpl.queryCount();
55         System.out.println("事务处理之后");
56     }
57 
58     @Override
59     public void updateCount() {
60         System.out.println("事务处理之前");
61         // 调用委托类的方法;
62         countImpl.updateCount();
63         System.out.println("事务处理之后");
64 
65     }
66 
67 }
View Code

相关文章:

  • 2022-12-23
  • 2021-09-02
  • 2021-12-26
  • 2022-12-23
  • 2021-07-15
  • 2019-12-27
  • 2022-02-09
  • 2022-01-31
猜你喜欢
  • 2021-12-21
  • 2021-12-05
  • 2021-05-20
  • 2021-07-23
  • 2021-11-07
  • 2022-01-08
  • 2021-09-17
相关资源
相似解决方案