java动态代理

 代理模式 

代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。
按照代理的创建时期,代理类可以分为两种。
静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理:在程序运行时,运用反射机制动态创建而成。

 

动态代理
动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类。java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。

 

动态代理示例:

BookFacade.java

 

Java代码 复制代码 收藏代码
  1. public interface BookFacade {
  2. public void addBook();
  3. }
public interface BookFacade {  
    public void addBook();  
} 

 

BookFacadeImpl.java

 

Java代码 复制代码 收藏代码
  1. public class BookFacadeImpl implements BookFacade {
  2.  
  3. @Override
  4. public void addBook() {
  5. System.out.println("增加图书方法。。。");
  6. }
  7.  
  8. }
public class BookFacadeImpl implements BookFacade {  
  
    @Override  
    public void addBook() {  
        System.out.println("增加图书方法。。。");  
    }  
  
} 

BookFacadeProxy.java

 

Java代码 复制代码 收藏代码
  1. public class BookFacadeProxy implements InvocationHandler {
  2. private Object target;
  3. /**
  4. * 绑定委托对象并返回一个代理类
  5. * @param target
  6. * @return
  7. */
  8. public Object bind(Object target) {
  9. this.target = target;
  10. //取得代理对象
  11. return Proxy.newProxyInstance(target.getClass().getClassLoader(),
  12. target.getClass().getInterfaces(), this);
  13. }
  14.  
  15. @Override
  16. /**
  17. * 调用方法
  18. */
  19. public Object invoke(Object proxy, Method method, Object[] args)
  20. throws Throwable {
  21. Object result=null;
  22. System.out.println("事物开始");
  23. //执行方法
  24. result=method.invoke(target, args);
  25. System.out.println("事物结束");
  26. return result;
  27. }
  28.  
  29. }    

你可能感兴趣的:(java,代理,动态)