`

动态代理简介

阅读更多

 

nicolas 111216

 

主要资料参考自《Spring Gossip

 

1.动态代理

利用动态代理,可代理一个具体的对象。从而在具体对象工作时,进行切面上的操作处理。

简单来说,可以对一个对象的操作进行封装

 

2.动态代理需实现的接口

 

动态代理必须实现此接口:java.lang.reflect.InvocationHandler

 

3.动态代理技术简介

 

利用Proxy.newProxyInstance()静态方法创建一个代理对象(必须传入所要代理的接口),然后可用代理对象进行工作。调用代理对象的被代理方法时,调用接口InvocationHandlerinvoke()方法,invoke()方法得到被代理对象的方法名称与执行参数,然后执行method.invoke()进行真正执行。method.invoke()的传回对象是被代理方法的执行结果。

 

4.切面

 

利用动态代理可创建代理对象,将业务逻辑无关操作放在代理层处理。被代理对象只需关注核心的业务逻辑即可。而代理层不介入具体业务,成为通用的业务无关切面层。

 

典型的应用有日志、安全控制等。

 

5.示例

 

1)被代理接口

 

 

public interface IHello {
    public void hello(String name);
}
 

 

2)被代理对象

 

 

public class HelloSpeaker implements IHello {
    public void hello(String name) {
       System.out.println("Hello, " + name);
    }
}
 

 

3)动态代理对象

 

 

 public class LogHandler implements InvocationHandler {
    private Logger logger = Logger.getLogger(this.getClass().getName());
 
    private Object delegate;
 
    public Object bind(Object delegate) {
       this.delegate = delegate;
       return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),
              delegate.getClass().getInterfaces(), this);
    }
 
    public Object invoke(Object proxy, Method method, Object[] args)
           throws Throwable {
       Object result = null;
 
       try {
           log("method starts..." + method);
 
           result = method.invoke(delegate, args);
 
           logger.log(Level.INFO, "method ends..." + method);
       } catch (Exception e) {
           log(e.toString());
       }
 
       return result;
    }
 
    private void log(String message) {
       logger.log(Level.INFO, message);
    }
}
 

 

4)主类

 

 

public class DynamicProxyDemo {
    public static void main(String[] args) {
       LogHandler logHandler = new LogHandler();
 
       IHello helloProxy = (IHello) logHandler.bind(new HelloSpeaker());
       helloProxy.hello("Justin");
    }
 
}
 

 

分享到:
评论

相关推荐

    JDK动态代理_JDK动态代理

    #### 二、JDK动态代理简介 JDK动态代理是Java平台提供的一个工具包,用于在运行时创建代理对象。它主要适用于实现了接口的情况,能够为这些接口动态生成实现类,并且可以在调用目标方法前后添加自定义的行为。JDK...

    java动态代理新java动态代理新java动态代理新

    #### 一、Java动态代理简介 Java动态代理是Java反射API提供的一个高级特性,主要用于实现对对象方法的调用拦截。动态代理允许我们在运行时创建一个接口的实现类实例,而无需提前知道其具体实现细节。这在很多框架...

    Java静态代理和动态代理

    #### 三、动态代理简介 与静态代理不同,动态代理是在程序运行时通过反射机制动态创建的。这意味着代理类的创建可以基于不同的条件,甚至可以在运行时决定是否使用代理。动态代理最大的优点是灵活性高,它能够适应...

    java动态代理

    #### 一、Java动态代理简介 在Java中,动态代理是一种非常重要的机制,它允许我们在运行时动态地创建一个接口的实现类实例。这种技术广泛应用于AOP(面向切面编程)、RPC(远程过程调用)等领域。通过动态代理,...

    Java 动态代理Proxy应用和底层源码分析.pdf

    #### 一、Java动态代理简介 Java动态代理是一种在运行时动态生成代理类的技术,通过该技术可以为一个或多个接口生成一个实现类,该实现类可以拦截接口方法的调用,并进行额外的操作。Java动态代理主要由`java.lang....

    java语言反射与动态代理学习笔记

    #### 四、动态代理简介 除了反射,Java还提供了动态代理机制,它允许在运行时创建接口的动态实现。动态代理通常用于AOP(面向切面编程)、事务管理、日志记录等场景。 **4.1 JDK动态代理**:基于`java.lang....

    使用JAVA中的动态代理实现数据库连接池

    #### 三、Java动态代理简介 Java动态代理主要是通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现的。具体来说: - `Proxy`: 提供了创建动态代理类的方法。 - `...

    java使用动态代理来实现AOP(日志记录)的实例代码共6

    1. Java动态代理简介: Java中的动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。Proxy类用于创建一个实现了特定接口的代理对象,而InvocationHandler接口则定义了...

    665.663.JAVA基础教程_动态代理与Java8新特性-AOP与动态代理的举例(665).rar

    1. 动态代理简介 动态代理是Java提供的一种机制,允许在运行时创建一个实现了指定接口的代理类。这种代理类可以拦截调用,并在调用前后执行额外的操作,如日志记录、事务管理等。Java的`java.lang.reflect.Proxy`类...

    java反射机制与动态代理

    #### 四、动态代理简介 除了反射机制外,Java还支持动态代理技术。动态代理是指在运行时动态创建代理类的过程。Java中的动态代理主要分为两类: 1. **基于接口的动态代理**:通过`java.lang.reflect.Proxy`类创建...

    java 动态代理 完整版

    ### Java动态代理完整版知识点详解 #### 一、Java反射机制概述 Java的反射机制是实现动态代理的基础,它提供了一种方式使得程序可以在运行时动态地获取类的信息(如类名、方法名等)以及操作类的对象。通过反射...

    java 动态代理实现AOP

    ### Java动态代理实现AOP详解 #### 一、引言 随着软件开发复杂度的提升,传统的面向对象编程(OOP)已经难以满足现代软件工程的需求。为了更好地管理跨切面的关注点,如日志记录、性能监控、安全控制等,面向切面...

    转载:cglib动态代理介绍(一)

    CGlib是Java编程语言中的一个库,主要用于创建子类,也称为子类代理或动态代理。这个库在很多场合被广泛使用,特别是在那些需要在运行时动态创建对象或增强已有对象功能的场景下,比如Spring AOP(面向切面编程)...

    基于Java动态代理的AOP实现.zip

    本项目旨在通过Java的动态代理技术实现面向切面编程(AOP),涵盖了静态代理、JDK动态代理、CGLIB动态代理、AspectJ以及基于instrumentation的动态代理等多种实现方式。通过这些实现方式,可以在不修改原有代码的...

    cglib动态代理

    ### cglib动态代理详解 #### 一、cglib简介 cglib(Code Generation Library)是一个功能强大、性能高效且质量卓越的代码生成类库。它能够在程序运行时动态地扩展Java类并实现Java接口,其核心是利用ASM(Another ...

    简谈jdk动态代理

    ### 简谈JDK动态代理 #### 一、引言 JDK动态代理机制是Java反射机制的一个重要应用,它允许程序在运行时创建一个实现了特定接口的新类实例,并且能够控制这些新类实例的方法调用行为。这种机制不仅提高了代码的灵活...

    Java 动态代理.md

    ### Java 动态代理 Java 动态代理是一种在运行时动态创建代理对象的技术,它在 Java 开发中被广泛应用,特别是在诸如 AOP(面向切面编程)的实现原理、RPC 远程调用、Java 注解对象获取、日志框架、全局性异常处理...

    # 动态代理设计模式.md

    动态代理是一种设计模式,它允许在运行时为对象创建代理,并在代理对象上执行方法调用。代理对象可以拦截对真实对象的访问,并允许在调用前后插入附加逻辑。这种设计模式可以用于横切关注点的集中处理,如日志记录、...

    java反射.pdf

    1. **动态代理简介**: - 动态代理是基于反射的一种技术,用于创建一个代理类来代理其他类的方法调用。 - 动态代理可以避免为每个业务层实现类编写单独的代理类,从而减少代码量。 - 它不是GoF设计模式之一。 2....

    Spring定时器与动态代理实例

    - **CGLIB简介**:CGLIB是一个强大的高性能的代码生成库,它在许多AOP框架中被使用,例如Spring AOP和dynaop,为他们提供方法的动态代理。 - **生成代理对象**:通过CGLIB的Enhancer类,我们可以创建一个代理类,...

Global site tag (gtag.js) - Google Analytics