`

Cglib测试

    博客分类:
  • Java
 
阅读更多
public class TestCglib {
	
	public static void main(String[] args) {
		TestCglib tc = new TestCglib();
		tc.getCglib1().doOperate();
                  //会出异常
                  tc.getCglib2(tc.getCglib1()).doOperate();
	}
	
	public void doOperate(){
		System.out.println("I want to do someThing");
	}
	
	public TestCglib getCglib1(){
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(TestCglib.class);
		enhancer.setCallback(new MethodInterceptor1());
		return (TestCglib)enhancer.create();
	}
	
	public TestCglib getCglib2( TestCglib obj){
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(obj.getClass());
		enhancer.setCallback(new MethodInterceptor1());
		return (TestCglib)enhancer.create();
	}
}


class MethodInterceptor1 implements MethodInterceptor{

	@Override
	public Object intercept(Object obj, Method med, Object[] args,
			MethodProxy proxy) throws Throwable {
		System.out.println("Method Interceptor 1");
		return proxy.invokeSuper(obj, args);
	}
	
}

class MethodInterceptor2 implements MethodInterceptor{

	@Override
	public Object intercept(Object obj, Method med, Object[] args,
			MethodProxy proxy) throws Throwable {
		System.out.println("Method Interceptor 2");
		return proxy.invokeSuper(obj, args);
	}
	
}


在Main方法中如果是
tc.getCglib1().doOperate();
   
可以成功运行
但如果是如下代码,则会抛出异常
tc.getCglib2(tc.getCglib1()).doOperate();

说明同一个类只可以用cglib重写一次
分享到:
评论

相关推荐

    CGLIB简介 CGLIB简介 CGLIB简介 CGLIB简介

    // 测试类 public class TestCglib { public static void main(String[] args) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(HelloWorld.class); enhancer.setCallback(new CglibProxy()); ...

    cglib_cglib3.2_remain3gr_cglibjar包_cglib.jar_

    总的来说,CGLib作为一个强大的字节码生成库,广泛应用于AOP(面向切面编程)、ORM框架(如Hibernate)、测试工具(如Mockito)等领域,提供了对Java类的灵活扩展和控制。正确理解和使用CGLib,能极大地提升开发效率...

    Cglib3.3.0最新版jar包

    - 在单元测试中,模拟复杂的对象行为。 - ORM框架如Hibernate,用于动态创建持久化类的代理。 - 性能监控工具,为方法添加性能计时器。 7. **配置与使用**:在Java项目中,可以通过Maven或Gradle等构建工具引入...

    cglib.jar免费下载

    - **Mock测试**:在单元测试中,如使用Mockito框架,CGLIB用于生成被测试对象的模拟类,以便于进行隔离测试。 - **代码生成**:在某些情况下,开发者可能需要在运行时生成新的类或对象,如动态SQL库MyBatis的动态...

    CGLIB依赖jar包

    这种技术在许多场景下都非常有用,比如实现AOP(面向切面编程)中的动态代理、性能优化和测试等。 Spring框架中,CGLIB被用来实现AOP代理。AOP是Spring的核心特性之一,它允许程序员定义“切面”,即关注点的模块化...

    cglib-nodep

    4. **测试工具**: 在单元测试中,有时需要模拟复杂的对象行为,CGlib可以用来创建模拟对象,方便测试。 CGlib的工作原理大致如下: 1. **创建子类**: 当需要代理一个类时,CGlib会动态生成一个新的类,这个新类...

    cglib2.2jar包

    3. **代码生成**:CGLIB也可以用于自动生成类和方法,简化编码工作,如在测试框架如Mockito中,用于模拟对象的行为。 **二、CGLIB的工作原理** CGLIB通过ASM库在运行时动态生成一个目标类的子类,并在子类中拦截...

    cglib.jar/cglib-nodep.jar免费下载

    - 测试工具:在单元测试中,可以使用CGLib模拟复杂的对象行为。 总的来说,CGLib是Java开发中一个非常实用的工具,尤其在需要动态生成代码或者实现AOP策略时,它的价值得以充分体现。了解并熟练掌握CGLib,对于提升...

    cglib动态生成java类

    2. **测试**:在单元测试中,可以通过CGLib生成类的模拟对象(mock object),方便对类的方法进行模拟和测试。 3. **动态数据访问**:例如ORM框架如Hibernate,使用CGLib动态创建数据访问对象(DAO)。 总的来说,...

    动态代理cglibjar包和源码

    - 测试工具:Mock框架如EasyMock,使用CGLIB生成模拟对象,方便测试。 5. **CGLIB与Java内置动态代理JDK Proxy的区别**: - JDK Proxy基于接口实现,而CGLIB基于继承,因此CGLIB可以代理没有接口的类。 - JDK ...

    cglib-2.0.2.jar

    3. **测试工具**:Mockito等测试框架也会使用CGlib来模拟对象的行为,以便于单元测试。 4. **缓存处理**:某些缓存系统如Ehcache可能会利用CGlib生成缓存对象的代理,以实现缓存失效和数据同步。 总的来说,CGlib-...

    cglib-2.2.rar

    在实际应用中,CGLib不仅用于动态代理,还可以用于性能优化、日志记录、测试、内存数据库等场景。例如,在单元测试中,可以通过CGLib生成一个类的实例,模拟真实环境下的对象行为;在性能监控中,可以动态插入性能...

    cglib使用的jar包

    测试基于cglib动态代理测试使用的jar包. asm-7.0-beta.jar asm-commons-7.0-beta.jar asm-util-7.0-beta.jar cglib-3.1.jar

    CGLib小练习题

    另外,它还可以用于性能测试,通过生成动态类模拟大量对象,以测试系统的性能瓶颈。 在实际开发中,掌握CGLib的使用能够帮助我们更好地理解和利用动态代理技术,提升代码的灵活性和可扩展性。通过阅读和实践CGLib...

    强势分享cglib-src-2.2

    4. **测试工具**:在单元测试中,CGLib可以帮助我们模拟复杂对象,创建Mock对象。 **CGLib与Java动态代理的区别** 1. **Java动态代理**(java.lang.reflect.Proxy)需要目标类实现至少一个接口,而CGLib则不需要。...

    cglib-3.2.0.jar

    CGLIB是一个强大的高性能的代码生成包。它广泛的被许多AOP的框架使用,例如Spring ...EasyMock和jMock是通过使用模仿(mock)对象来测试java代码的包。它们都通过使用CGLIB来为那些没有接口的类创建模仿(mock)对象。

    简单实现Cglib子类代理

    总的来说,Cglib子类代理是一种强大的工具,它使得我们能够在不修改源代码的情况下,对已有对象的行为进行扩展或增强,这对于开发和测试来说都非常有用。在理解其工作原理和使用方法后,我们可以灵活地运用到实际...

    cglib.zip

    3. **测试**:在单元测试中,可以使用CGLIB创建模拟对象(mock object),方便测试隔离。 4. **ORM框架**:许多ORM框架,如Hibernate,也利用CGLIB对持久化类进行增强,实现懒加载、缓存等功能。 总结起来,CGLIB是...

    cglib.jar源码

    在实际开发中,CGLIB不仅用于AOP,还常用于性能优化、模拟对象、测试框架等领域,因为它能提供比反射更快的运行速度。然而,CGLIB代理也有其限制,比如它不能代理final类和final方法,以及无法处理带有动态类型的...

    cglib-nodep-2.1_3.jar

    总的来说,"cglib-nodep-2.1_3.jar" 是一个用于Java开发的重要库,提供了动态代理功能,使得我们可以在运行时扩展或改变类的行为,这对于实现AOP、单元测试、性能监控等场景非常有用。了解并熟练使用CGlib能够提升...

Global site tag (gtag.js) - Google Analytics