cglib是针对类来实现代理的,原理是生成一个被代理类的子类。
1、创建被代理类
package cglib;
public class Driver {
public String doAction() {
System.out.println("驾驶员喝酒了,需要找代驾");
return "去XXX地方";
}
}
2、创建代理类
package cglib;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class Daijia implements MethodInterceptor {
public Object getInstance(String className) throws ClassNotFoundException {
Enhancer enhancer = new Enhancer();//加强器,用来创建动态代理类
Class clazz = Class.forName(className);
enhancer.setSuperclass(clazz);
enhancer.setCallback(this);
return enhancer.create();
}
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("我是代驾,您需要去哪里?");
System.out.println("---------------");
proxy.invokeSuper(obj, args);
System.out.println("---------------");
System.out.println("到达目的地");
return null;
}
}
3、测试类
package cglib;
public class CglibTest {
public static void main(String[] args) throws ClassNotFoundException {
Driver driver = (Driver)new Daijia().getInstance("cglib.Driver");
driver.doAction();
}
}
分享到:
相关推荐
Java中的动态代理是一种重要的设计模式,它允许在运行时创建具有特定行为的代理对象,以扩展或增强原有对象的功能。动态代理主要分为两种技术:JDK动态代理和CGLIB动态代理。 ### JDK动态代理 JDK动态代理是Java...
在Java世界中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种设计模式,它允许程序员在不修改源代码的情况下,插入新的行为或增强已有功能。Spring框架是AOP实现的一个典范,它提供了两种主要的动态...
java常用设计模式及JDK与CGLIB实现动态代理区别(源码) /** * 使用cglib动态代理 * @author * */ public class BookFacadeProxy implements MethodInterceptor{ private Object target; @Override public...
java设计模式【之】Cglib动态代理【源码】【场景:帮爸爸买菜】 /** * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用...
在Java编程领域,代理模式是一种常见且重要的设计模式,它允许我们为一个对象提供一个代理以控制对该对象的访问。代理模式在实际应用中广泛用于数据缓存、权限控制、事务处理等方面。JDK和CGLIB是Java中实现动态代理...
代理模式是一种设计模式,它允许我们在不修改原有对象的情况下,为对象添加新的功能或行为。在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最...
设计模式方面,CgLib动态代理与工厂模式、装饰器模式和代理模式有关。在AOP中,CgLib实际上扮演了代理的角色,创建了一个目标对象的代理,允许在调用实际方法前后添加额外的行为。这种行为类似于装饰器模式,因为它...
在Java编程领域,动态代理是一种常见的设计模式,它允许我们在运行时创建代理对象来扩展或增强已有对象的功能。本文将深入探讨如何在基于Maven的项目中利用CGLib库实现动态代理。CGLib(Code Generation Library)是...
代理模式是软件设计中的一种设计模式,它为其他对象提供了一个代理对象,以控制对原始对象的访问。代理模式属于结构型模式,它的主要作用是提供一个代理对象,以便控制对原始对象的访问,保护原始对象不被外部访问。...
在Java编程领域,动态代理是一种常见的设计模式,用于在运行时创建对象的代理,以便在调用实际目标方法之前或之后插入额外的行为。主要存在两种常见的动态代理技术:JDK动态代理和CGLIB(Code Generation Library)...
在Java编程中,代理模式是一种设计模式,它允许我们在不修改原有对象的基础上,为对象添加新的功能或行为。代理模式通常分为静态代理和动态代理。本文将重点介绍使用CGLIB库实现的动态代理。 CGLIB(Code ...
在Java世界里,代理模式是一种常见的设计模式,它允许我们创建对象的代理来控制对原对象的访问。CGLib是Java中实现动态代理的一种方式,尤其是在Spring AOP(面向切面编程)中被广泛应用。 CGLib代理主要分为两种...
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类...
在Java编程领域,AOP(Aspect Oriented Programming,面向切面编程)是一种强大的设计模式,它允许程序员在不修改原有代码的情况下,通过插入新的行为来扩展功能。动态代理是实现AOP的一种方式,而在Java中,CGLIB...
Spring支持JDK动态代理和CGLIB代理,根据目标对象是否实现接口来选择合适的代理方式。通过定义切面(Aspect),我们可以定义切入点(Pointcut)来指定何时应用增强(Advice),如环绕通知(Around advice)可以在...
在Java编程中,代理模式是一种常用的面向对象设计模式,它允许我们为一个对象提供一个代理以控制对该对象的访问。代理模式在很多场景下都非常有用,例如在远程调用、安全控制、日志记录等。Java提供了两种主要的代理...
和设计模式,代理模式博客有关联(https://blog.csdn.net/qq_41037075/article/details/124500915?spm=1001.2014.3001.5502)需要大家建立一个目录lib(命名随意),将jar包拷贝进去,然后右击进行add as library导入...
动态代理模式是一种在运行时创建代理对象以控制或扩展原有对象行为的设计模式。它允许我们为现有的对象提供一种代理以增强其功能,而无需修改原对象的代码。动态代理模式通常用于实现对目标对象的额外操作,如日志...
在 Java 中,代理模式是一种设计模式,它允许我们在不修改原有对象的基础上,为对象增加额外的功能。代理模式的核心在于代理类(Proxy)作为真实对象(RealSubject)的替代品,提供与真实对象相同的接口,但在调用...