`
windywindy
  • 浏览: 169380 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用cglib创建代理类

阅读更多
import java.lang.reflect.Method;

import com.dao.impl.PersonDaoImpl;

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

//当代理对象没有实现接口,我们就可以 使用CGLIB生成代理 ,需要我们使用 cglib-nodep-2.1_3.jar
public class CGlibProxyFactory implements MethodInterceptor {
	private Object targetObject;// 代理的目标对象

	public Object createProxyInstance(Object targetObject) {
		this.targetObject = targetObject;
		Enhancer enhancer = new Enhancer();// 该类用于生成代理对象
		enhancer.setSuperclass(this.targetObject.getClass());// 设置父类
		enhancer.setCallback(this);// 设置回调用对象为本身
		return enhancer.create();
	}

	public Object intercept(Object proxy, Method method, Object[] args,
			MethodProxy methodProxy) throws Throwable {
		PersonDaoImpl bean = (PersonDaoImpl) this.targetObject;  
        Object result = null;   
        if(bean.getUser()!=null){  
            try {  
                result = methodProxy.invoke(this.targetObject, args);;  
            } catch (RuntimeException e) {  
            } 
        }  
		return result;
	}
}
分享到:
评论

相关推荐

    cglib创建代理类.rar

    springAOP等框架中,大量用到代理技术; 两类代理技术: 1,java动态代理,见JDK文档或相关java书;...2.cglib创建代理类,比第一种更加简单,代理类和背代理类不需要实现共同接口。本例子就是cglib代理的例子,很简单

    CGlib动态代理类的jar包

    在Java编程中,动态代理是一种在运行时创建代理类和对象的技术,可以用于拦截方法调用,实现AOP(面向切面编程)或者为已有接口或类提供额外功能。CGlib是Java动态代理的一种实现方式,它不是依赖于Java的反射机制,...

    CGlib动态代理类所需的jar包

    1. **AOP编程**: 在Spring框架中,如果目标类没有实现接口,Spring就会使用CGlib来创建代理对象,以便在方法调用前后插入切面逻辑。 2. **性能优化**: 通过动态生成字节码,CGlib可以创建比反射更快的对象实例,这...

    Jdk动态代理和cglib动态代理原理

    2. **创建代理对象**:使用`Enhancer`类,设置回调接口`MethodInterceptor`,并指定被代理的目标对象。然后调用`create()`方法,即可得到代理对象。 3. **拦截方法**:在`MethodInterceptor`的`intercept()`方法中...

    cglib代理模式要使用的相关jar包

    CGLIB通过字节码技术生成代理类,能够在运行时动态创建子类并扩展目标对象,从而实现代理功能。这种代理方式相对于Java自带的JDK动态代理(基于接口的代理)来说,对目标类没有接口限制,更具有灵活性。 要使用...

    java代理机制 JDK动态代理和cglib代理 详解

    CGLIB(Code Generation Library)是另一个常用的Java代理库,它不需要目标类实现任何接口,而是通过继承的方式创建代理类。CGLIB使用ASM库在运行时动态生成字节码,创建目标类的子类,从而实现对目标类方法的增强。...

    cglib动态代理介绍

    当我们通过`enhancer.create()`创建代理对象并调用`myMethod`时,可以看到在实际方法执行前后,我们插入的逻辑得到了执行。 CGlib库不仅仅用于动态代理,还可以用于其他场景,比如性能优化(通过生成子类优化方法...

    浅谈JDK动态代理与CGLIB代理去区别

    在内存占用上,两者差别不大,但CGLIB生成的代理类可能略微增加内存负担。 在工具支持上,Spring框架对两者都有很好的支持。Spring AOP默认使用JDK动态代理,但如果目标类没有实现接口,它会自动切换到CGLIB。在...

    简单实现Cglib子类代理

    Cglib通过继承机制来创建代理对象,因为不是所有的类都可以被代理,那些final类或者包含final方法的类是无法通过继承来创建子类的。但大部分情况下,我们可以通过Cglib来为一个类创建子类,并在子类中拦截方法调用,...

    使用CGLIB的代理技术

    在 intercept() 方法中,我们可以使用 MethodProxy 对象调用被代理类的原始方法。例如: ```java public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws ...

    java设计模式【之】Cglib动态代理【源码】【场景:帮爸爸买菜】

    创建被代理类、创建代理类、代理类内部聚合被代理类 * 2.创建返回代理类实例方法 Enhancer.create(object.getClass(), this); * (1.创建工具类,2.设置工具类的父类为被代理类 3.设计监听回调为当前this 4.return ...

    cglib动态代理jar包

    1. 创建Enhancer对象:这是CGlib的核心类,它可以配置代理的创建过程,包括设置回调函数、代理类名等。 2. 设置回调函数:通常我们使用MethodInterceptor接口实现回调函数,这个接口定义了一个intercept()方法,当...

    jdk与cglib动态代理与底层实现

    与JDK动态代理不同,CGLIB并不依赖接口,而是通过字节码技术生成一个被代理类的子类来实现。这使得CGLIB能够代理没有实现接口的类。CGLIB的核心是ASM库,它能直接操作字节码生成新的类。在Spring中,如果目标类没有...

    cglib动态代理相关包

    1. Enhancer:主要用来创建代理对象,可以设置拦截器、父类等信息。 2. Callback:接口,提供了拦截方法调用的抽象,CGlib中的MethodInterceptor是它的实现。 3. MethodInterceptor:用于拦截和处理方法调用,实现...

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

    - CGlib生成的代理类会继承目标类,所以如果目标类声明为final,CGlib将无法创建代理。 - 对于包含final方法的目标类,CGlib也无法在这些方法上添加拦截器。 - 如果目标类中包含静态方法,CGlib代理不会影响静态方法...

    cglib动态代理用到的两个包

    1. **cglib** 包:这是CGLib的主要实现包,包含了用于创建代理对象的所有类和接口。当无法或者不想使用Java标准的JDK动态代理(只能代理接口实现类)时,CGLib可以生成目标类的子类来实现对目标对象的代理。这个过程...

    cglib的动态代理需要的包

    使用CGlib创建动态代理的一般步骤如下: 1. 引入CGlib的jar包到项目中。 2. 创建一个实现了`MethodInterceptor`接口的类,定义`intercept`方法。 3. 创建`Enhancer`实例,并设置拦截器和目标对象。 4. 调用`...

    CGLib代理jar包

    4. 创建代理对象:最后,通过Enhancer的create()方法,你可以创建出代理对象。这个代理对象在调用目标方法时会自动触发之前设置的回调函数。 CGLib代理的应用场景包括但不限于: - AOP:在不修改源代码的情况下,...

    JAVA JDK静态代理、动态代理、CGlib代理的代码演示

    // 使用CGLIB创建代理 Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(ServiceImpl.class); enhancer.setCallback(new MethodInterceptor() { @Override public Object intercept(Object obj, ...

    CgLib动态代理所需的jar

    1. 创建Enhancer对象:这是CgLib的核心类,用于配置代理对象的创建过程。 2. 设置回调函数:通常使用MethodInterceptor接口,定义intercept()方法,这是代理方法执行前后的回调逻辑。 3. 通过Enhancer对象的create()...

Global site tag (gtag.js) - Google Analytics