Java静态代理解析

java 静态代理的主要特征就是,代理类和委托类要实现同样的接口。在调用接口方法的时候,对外提供一个实例工厂对象。

静态代理类优缺点 
优点:业务类只需要关注业务逻辑本身,保证了业务类的重用性。这是代理的共有优点。 
缺点: 
1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。 
2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。

1 public interface ImplUserDao {
2     public void add();//定义  添加接口
3     public void delete();//定义删除接口
4 }

ImplUserDao接口

 1 public class UserDaoImpl implements ImplUserDao{
 2
 3     /* (non-Javadoc)
 4      * @see cn.org.fupin.ImplUserDao#add()
 5      */
 6     public void add() {
 7         // TODO Auto-generated method stub
 8         System.out.println("UserDaoImpl.add()");
 9     }
10
11     /* (non-Javadoc)
12      * @see cn.org.fupin.ImplUserDao#delete()
13      */
14     public void delete() {
15         // TODO Auto-generated method stub
16         System.out.println("UserDaoImpl.delete()");
17     }
18
19
20 }

UserDaoImpl委托类

 1 public class UserDaoProxy implements ImplUserDao{
 2
 3     private ImplUserDao implUserDao;
 4
 5     public UserDaoProxy(ImplUserDao implUserDao) {
 6
 7         this.implUserDao = implUserDao;
 8     }
 9
10     public void add() {
11         // TODO Auto-generated method stub
12         implUserDao.add();
13     }
14
15     /* (non-Javadoc)
16      * @see cn.org.fupin.ImplUserDao#delete()
17      */
18     public void delete() {
19         // TODO Auto-generated method stub
20         implUserDao.delete();
21     }
22
23 }

UserDaoProxy代理类

1 public class UserDaoFactory {
2
3
4     public static ImplUserDao getUserInstance(){
5         return new UserDaoProxy(new UserDaoImpl());
6     }
7
8 }

UserDaoFactory工厂类

1 public class Client {
2     public static void main(String[] args) {
3         ImplUserDao implUserDao = UserDaoFactory.getUserInstance();
4         implUserDao.add();
5         implUserDao.delete();
6     }
7 }

Client测试类

时间: 2025-01-17 03:36:58

Java静态代理解析的相关文章

Java 静态代理和动态代理

Java 静态代理 静态代理通常用于对原有业务逻辑的扩充.比如持有二方包的某个类,并调用了其中的某些方法.然后出于某种原因,比如记录日志.打印方法执行时间,但是又不好将这些逻辑写入二方包的方法里.所以可以创建一个代理类实现和二方方法相同的方法,通过让代理类持有真实对象,然后在原代码中调用代理类方法,来达到添加我们需要业务逻辑的目的. 这其实也就是代理模式的一种实现,通过对真实对象的封装,来实现扩展性. 一个典型的代理模式通常有三个角色,这里称之为**代理三要素** 共同接口 public int

AOP静态代理解析1-标签解析

AOP静态代理使用示例见Spring的LoadTimeWeaver(代码织入) Instrumentation使用示例见java.lang.instrument使用 AOP的静态代理主要是在虚拟机启动时通过改变目标对象字节码的方式来完成对目标对象的增强,它与动态代理相比具有更高的效率,因为在动态代理调用的过程中,还需要一个动态创建代理类并代理目标对象的步骤,而静态代理则是在启动时便完成了字节码增强,当系统再次调用目标类时与调用正常的类并无差别,所以在效率上会相对高些. AspectJ所做的事 在

深入浅出java静态代理和动态代理

首先介绍一下,什么是代理: 代理模式,是常用的设计模式.特征是,代理类与委托类有相同的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类.以及事后处理消息. 代理类和委托类,存在着关联关系.代理类的对象本身并不真正实现服务,知识通过调用委托类的对象的相关方法. 代理类可以分为两种:静态代理和动态代理. 静态代理: 代理类是由程序员创建,或由工具生成的代码 编译成的.在程序运行前,代理类的 *.class文件已经存在了.直接就可以运行 . 动态代理: 动态代理的代理类.没有直接由

java静态代理与动态代理

原文链接:http://www.orlion.ga/207/ 一.代理模式 代理模式是经常用到的设计模式,代理模式是给指定对象提供代理对象.由代理对象来控制具体对象的引用. 代理模式涉及到的角色: 抽象主题角色:声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方都能用代理主题代替. 代理主题角色:含有真实主题的引用,从而可以在任何时候操作真实主题,代理主题功过提供和真实主题相同的接口,使它可以随时代替真实主题.代理主题通过持有真实主题的引用,不但可以控制真实主题的创建或删除,可以在真实

Java静态代理与动态代理模式的实现

前言:    在现实生活中,考虑以下的场景:小王打算要去租房,他相中了一个房子,准备去找房东洽谈相关事宜.但是房东他很忙,平时上班没时间,总没有时间见面,他也没办法.后来,房东想了一个办法,他找到了一个人代替自己和小王洽谈,房东本人不用出面,他只要把他的对房客的要求告诉他找的那个人,那个人和你商量就可以了,这样就可以完成租房这件事了.这种现实场景比比皆是,所呈现出来的其实就是代理模式的原型的一种.我们把焦点转向编程,你是否在编程中经常遇见这样一个问题,对于访问某个对象,我们希望给它的方法前加入一

java静态代理与动态代理简单分析

原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5860749.html 1.动态代理(Dynamic Proxy) 代理分为静态代理和动态代理,静态代理是在编译时就将接口.实现类.代理类一股脑儿全部手动完成,但如果我们需要很多的代理,每一个都这么手动的去创建实属浪费时间,而且会有大量的重复代码,此时我们就可以采用动态代理,动态代理可以在程序运行期间根据需要动态的创建代理类及其实例,来完成具体的功能. 其实方法直接调用就可以完成功能,为什么

java 静态代理

1.定义 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用.比如,租房的时候,中介就充当代理角色. 2.静态代理角色 抽象角色:通过接口或抽象类声明真实角色实现的业务方法. 真实角色:被代理的角色,实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用. 代理角色:代理真实角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作.  3.实例分析 我们以租房

java 静态代理 JDK动态代理 Cglib动态代理

下面以一个简单的银行账户为例讲述讲述动态代理. 设计一个银行账户类,包含用户的账户余额,实现查询和更新余额功能 这个系统用了一段时间,有客户要求对账说账户余额给弄错了?因为上面没有存取款记录,最后银行不认账,客户收到了损失.银行为了避免这种现象再次发生,决定对这个系统进行修改,但是因为bankAccount太过复杂,希望在不修改bankAccount的情况下,增加日志功能. 静态代理 使用静态代理解决上面的问题. 银行要求所有模块都需要添加日志功能,这对苦逼的程序员来说真的是一个不小的工作量啊,

Java静态代理学习

代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉及到的角色 抽象角色:声明真实对象和代理对象的共同接口. 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能够代替真实对象. 同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装. 真实角色:代理角色