首页 > 代码库 > Java静态代理解析

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 stub16         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 stub12         implUserDao.add();13     }14 15     /* (non-Javadoc)16      * @see cn.org.fupin.ImplUserDao#delete()17      */18     public void delete() {19         // TODO Auto-generated method stub20         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测试类

 

Java静态代理解析