`
chenhua_1984
  • 浏览: 1251863 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

jdk和cglib动态代理的demo

阅读更多

JDK的动态代理是基于接口的

package  com.open.aop; 
public   interface  BusinessInterface   {   
  public   void  processBusiness();
}
 

目标对象

package com.open.aop;
public class BusinessObject implements BusinessInterface { 
   public void processBusiness() {       
     System.out.println("action");   
   }
}
 

代理对象

package com.open.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class LogHandler implements InvocationHandler { 
   private Object delegate;   
 public Object binder(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 obj = null;     
     System.out.println("对象方法调用前");    
    try {            
         obj = method.invoke(delegate, args);        
      } catch (Exception e) {        }        
      System.out.println("对象方法调用后");        
     return obj;    
     }

}
 

测试类

package com.open.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Test {   
 public static void main(String[] args) {      
      BusinessInterface bi = (BusinessInterface) new LogHandler().binder(new BusinessObject());    
      bi.processBusiness();    

  }

}
 

输出结果

对象方法调用前
action
对象方法调用后

**********************************cglib******************************************

目标对象

public class Target {

    public String execute() {
        String message = "----------test()----------";
        System.out.println(message);
        return message;
    }
}

 拦截器

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;


public class MyMethodInterceptor implements MethodInterceptor {

    public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        System.out.println(">>>MethodInterceptor start...");
        Object result = methodProxy.invokeSuper(object,args);
        System.out.println(">>>MethodInterceptor ending...");
        return "hahahh";
    }
}
 
import net.sf.cglib.proxy.Enhancer;
public class TestCglibProxy  {

    public static void main(String rags[]){
        Target target = new Target();
        TestCglibProxy test = new TestCglibProxy();
        Target proxyTarget = (Target)test.createProxy(Target.class);
        String res=proxyTarget.execute();
        System.out.println(res);
    }

    public Object createProxy(Class targetClass){
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(targetClass);
        enhancer.setCallback(new MyMethodInterceptor());
        return enhancer.create();
    }
}

 运行结果:

结果 写道
C:\classes>java -cp .;C:\classes\cglib-nodep-2.1_3.jar TestCglibProxy
>>>MethodInterceptor start...
----------test()----------
>>>MethodInterceptor ending...
hahahh

C:\classes>

 

  • 大小: 11.9 KB
分享到:
评论

相关推荐

    JAVA动态代理实现Demo(JDK动态代理和CGLIB动态代理)

    Java提供了两种主要的动态代理实现方式:JDK动态代理和CGLIB动态代理。 **JDK动态代理**: JDK动态代理基于接口实现,也就是说,被代理的对象必须实现至少一个接口。代理机制的核心是`java.lang.reflect.Proxy`类和...

    Java 动态代理 Demo

    Java Jdk 和 Cglib 动态代理 Demo 1.通过 JDK 反射形式创建动态代理 2.通过CGLIB基于ASM字节码技术创建动态代理 3.Java 反射原理演示 4.CGLib 依赖如下: <groupId>cglib <artifactId>cglib <version>3.3.0 ...

    java 动态代理实例(JDK代理与CGLIB代理)

    动态代理主要分为两种:JDK代理和CGLIB代理。 **JDK代理**是基于接口的代理,它通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口实现。当我们的目标对象实现了特定的接口时,我们可以...

    AOP 动态代理demo

    在"AopDemo"这个文件中,我们可以期待看到一个完整的示例,它将演示如何使用JDK动态代理和CGLIB来创建代理对象,并添加增强功能。通过这个例子,开发者可以更好地理解AOP的工作原理,以及如何在实际项目中应用这两种...

    spring-demo16-JDK动态代理.zip

    在Spring框架中,AOP代理可以自动利用JDK动态代理或CGLIB(当目标类没有实现接口时)。Spring AOP提供了更高级别的抽象,让我们可以在不直接操作`InvocationHandler`的情况下实现相同的目标。通过配置或注解,我们...

    CGLIB demo

    - 动态代理:当JDK的Proxy不能满足需求时,比如目标类没有实现接口,CGLIB可以提供解决方案。 - 缓存机制:比如在ORM框架Hibernate中,CGLIB用于缓存对象,提高查询效率。 下面是一个简单的CGLIB使用示例: ```...

    java jdk 动态代理用法、资料、demo

    java jdk 动态代理用法、资料、demo

    JDKProxy:用来理解jdk基于接口的动态代理和cglib基于类代理区别的demo

    本示例"JDKProxy"着重于对比两种常见的动态代理技术:JDK的接口代理和CGLIB的类代理。这两种代理方式在Java应用程序中都有广泛的应用,例如在AOP(面向切面编程)框架如Spring中。 首先,我们来深入了解一下JDK的...

    JavaProxy Demo

    总结来说,"JavaProxy Demo"是一个介绍和演示Java动态代理技术的实例,包括JDK和CGLIB两种实现方式,以及它们在实际场景中的应用。通过学习和分析这个Demo,开发者可以深入理解动态代理的概念,掌握如何在项目中利用...

    动态代理原理实例Demo

    动态代理主要有两种实现方式:JDK自带的`java.lang.reflect.Proxy`类和`java.lang.invoke.MethodHandle`API。这里主要讨论JDK的Proxy类,因为这是最常见且相对简单的实现方式。 1. **Proxy类的使用** - **Proxy....

    java 代理demo

    总结来说,Java代理机制为我们提供了扩展和控制已有对象行为的能力,无论是静态代理还是动态代理(JDK或CGlib),都能在不修改原始代码的基础上增加新的功能,使得代码更加灵活和可维护。在实际开发中,根据具体需求...

    Java代理实战Demo

    Java提供了两种主要的代理实现方式:CGLIB代理和JDK动态代理。 **JDK动态代理**: JDK动态代理主要依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。Proxy类用于创建一个代理对象,...

    代理模式Demo

    - **动态代理**:JDK提供Proxy类和InvocationHandler接口,可以在运行时动态创建代理对象。 - **CGLIB动态代理**:对于没有接口的情况,CGLIB库可以创建目标类的子类作为代理。 4. **ProxyPatternDemo的示例分析*...

    spring多个动态代理导致循环依赖报错问题解决

    首先,我们需要理解Spring中的两种动态代理方式:JDK动态代理和CGLIB动态代理。JDK动态代理基于接口,适用于实现了至少一个接口的目标对象;而CGLIB动态代理则是在运行时为类创建子类,适用于没有接口或需要代理的类...

    SpringAOP之探秘(动态代理、责任链模式、注解使用)

    在Java中,有两种主要的动态代理实现方式:JDK动态代理和CGLIB。JDK动态代理基于接口,当目标类实现了至少一个接口时,Java会生成一个代理类来执行增强的代码。而CGLIB则是在运行时通过字节码技术生成一个子类,用于...

    AOPTest_CGlib

    通过分析和运行这个示例工程,你可以了解到如何在实际项目中使用CGlib进行AOP编程,如何定义拦截器,以及如何通过动态代理来增强类的行为。这不仅加深了对CGlib的理解,也增强了对AOP概念的实际应用能力。

    SpringAop学习笔记以及实现Demo

    1. **基于代理的AOP**:Spring提供了两种代理方式,JDK动态代理和CGLIB代理。JDK动态代理主要针对接口实现,而CGLIB代理则针对类实现。 2. **基于注解的AOP**:Spring 2.5开始支持注解驱动的AOP,通过在方法上使用`...

    javaLearing:java只是学习的demo

    动态代理在Java中主要有两种实现方式:JDK动态代理和CGLIB动态代理。 1. JDK动态代理: JDK动态代理基于Java的接口实现,因此,要使用JDK动态代理,被代理的对象必须实现至少一个接口。JDK的`java.lang.reflect....

    java aop、ioc 、注解 实例 Demo

    Java AOP通常使用代理模式实现,Spring框架提供了两种主要的代理方式:JDK动态代理和CGLIB代理。JDK代理适用于接口实现类,而CGLIB代理则针对没有实现接口的类。 IOC,即控制反转,是对象依赖关系的反转。在传统的...

Global site tag (gtag.js) - Google Analytics