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

初試 cglib

阅读更多
public class Man {

	public String say() {
        System.out.println("cglib hello~~~");
        return "return cglib hello";
	} 

}

 

 

import java.lang.reflect.Method;

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

public class AOPInstrumenter implements MethodInterceptor,CallbackFilter  {
	private Enhancer enhancer = new Enhancer();
	private Object sub;
	
	public AOPInstrumenter(Object obj) {
		super();
		this.sub = obj;
	}

	public Object getInstrumentedClass(Class clz) {
		
		enhancer.setSuperclass(clz);
		//設置callback是this
		enhancer.setCallback(this);
		//添加 方法过滤器  返回1为不运行 0 为运行
		enhancer.setCallbackFilter(this);
		return enhancer.create();
	}

	public Object intercept(Object o, Method method, Object[] arg,
			MethodProxy proxy) throws Throwable {
		System.out.println("cglib 111111");
		Object obj = proxy.invoke(sub, arg);
		System.out.println("cglib 222222");
		return obj;
	}

	public int accept(Method method) {
		 System.out.println("accept........."+method.getName());
		return 0;
	}
}

 

 

 

 

public class AOPTest {
	public static void main(String[] args) {
		Man man = new Man();
		AOPInstrumenter instrumenter = new AOPInstrumenter(man);
		Man man1 = (Man) instrumenter.getInstrumentedClass(Man.class);
		man1.say();
	}
}

 

 

  運行結果:

accept.........say
accept.........hashCode
accept.........finalize
accept.........clone
accept.........equals
accept.........toString
cglib 111111
cglib hello~~~
cglib 222222

 

 

 

-------------------------------------------

稍作修改:

import java.lang.reflect.Method;

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

public class AOPInstrumenter implements CallbackFilter  {
	

	public Object getInstrumentedClass(Class clz) {
		Enhancer enhancer = new Enhancer();
		//设置需要代理的类
		enhancer.setSuperclass(clz);
		//設置callback是this
		enhancer.setCallback(new ManMethodInterceptor());
		//添加 方法过滤器  返回1为不运行 0 为运行
		enhancer.setCallbackFilter(this);
		//创建一个代理
		return enhancer.create();
	}

	

	public int accept(Method method) {
		 System.out.println("accept........."+method.getName());
		return 0;
	}
}

 

import java.lang.reflect.Method;

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

public class ManMethodInterceptor implements MethodInterceptor{
	public Object intercept(Object o, Method method, Object[] arg,
			MethodProxy proxy) throws Throwable {
		System.out.println("cglib 111111 name: " + method);
		//Object obj = proxy.invoke(o, arg);
		Object obj = proxy.invokeSuper(o, arg);
		System.out.println("cglib 222222");
		return obj;
	} 

 

 

public class AOPTest {
	public static void main(String[] args) {
		AOPInstrumenter instrumenter = new AOPInstrumenter();
		Man man1 = (Man) instrumenter.getInstrumentedClass(Man.class);
		man1.say();
	}
}

 

 

 

分享到:
评论

相关推荐

    CGLIB依赖jar包

    CGLIB,全称为Code Generation Library,是一个强大的高性能的代码生成库,它在Java世界里被广泛应用,尤其是在Spring框架中。CGLIB是基于ASM(一个底层的Java字节码操作和分析框架)来实现的,它允许开发者在运行时...

    cglib_cglib3.2_remain3gr_cglibjar包_cglib.jar_

    【CGLib:强大的Java代码生成库】 CGLib(Code Generation Library)是一个强大的、高性能的代码生成库,它在运行期扩展Java类与实现Java接口。这个库最初是为EJB的透明代理而设计的,但后来发展成为了一个广泛的...

    cglib.jar下载

    CGLIB介绍与原理(部分节选自网络) 一、什么是CGLIB? CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要...

    cglib的依赖包

    CGlib,全称为Code Generation Library,是一个强大的Java代码生成库,广泛用于动态代理、AOP(面向切面编程)框架以及性能优化等场景。它通过字节码技术为类创建子类,从而实现对目标类的功能增强。在Java中,由于...

    CGLIB需要的asm-2.2.3.jar和cglib-nodep-2.2.jar

    CGLIB,全称为Code Generation Library,是一个强大的高性能的代码生成库,被广泛应用于Java世界,尤其是Spring框架中。它允许程序在运行时动态地创建Java对象并扩展已有类的功能。CGLIB是通过字节码技术实现的,而...

    cglib及其依赖包

    CGLib,全称为Code Generation Library,是一个强大的高性能的代码生成库,它在Java世界中被广泛应用,尤其是在动态代理和AOP(面向切面编程)领域。这个库的主要功能是能够在运行时动态创建类或者增强已有类的功能...

    cglib_cglib.zip

    CGLib,全称为Code Generation Library,是一个强大的Java代码生成库,广泛用于动态代理、AOP(面向切面编程)等领域。它允许开发者在运行时创建和扩展Java类,而无需直接编写新的源代码或编译步骤。这个压缩包...

    cglib-3.1-API文档-中文版.zip

    赠送jar包:cglib-3.1.jar; 赠送原API文档:cglib-3.1-javadoc.jar; 赠送源代码:cglib-3.1-sources.jar; 赠送Maven依赖信息文件:cglib-3.1.pom; 包含翻译后的API文档:cglib-3.1-javadoc-API文档-中文(简体)版...

    Cglib3.3.0最新版jar包

    Cglib是一个强大的、高性能的代码生成库,它在Java世界中被广泛应用,尤其是在动态代理和AOP(面向切面编程)领域。Cglib3.3.0是该库的最新版本,提供了两个jar包:`cglib-3.3.0.jar`和`cglib-nodep-3.3.0.jar`。 1...

    开发工具 cglib-3.2.4

    开发工具 cglib-3.2.4开发工具 cglib-3.2.4开发工具 cglib-3.2.4开发工具 cglib-3.2.4开发工具 cglib-3.2.4开发工具 cglib-3.2.4开发工具 cglib-3.2.4开发工具 cglib-3.2.4开发工具 cglib-3.2.4开发工具 cglib-3.2.4...

    cglib包及依赖汉cglib3.1和asm4.2

    cglib包及依赖汉cglib3.1和asm4.2,主要作用是用户代理,代理为控制要访问的目标对象提供了一种途径。当访问对象时,它引入了一个间接的层。JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。...

    cglib2.2.jar

    CGLIB,全称为Code Generation Library,是一个非常强大的Java字节码操纵和动态代理框架。它在Java编程中扮演着重要角色,特别是在AOP(面向切面编程)和ORM(对象关系映射)框架中,如Spring AOP和Hibernate。这个...

    CGLib3.2.5依赖包及源码

    CGLib,全称为Code Generation Library,是一个强大的Java字节码操作库,广泛应用于动态代理、AOP(面向切面编程)以及性能优化等领域。它允许开发者在运行时创建和增强新的类或对象,而无需编写任何Java源代码。...

    cglib.jar | asm.jar对应版本

    其中,`cglib.jar` 和 `asm.jar` 是实现Java动态代理的两个关键库,它们在许多框架和库中都有广泛的应用,比如Spring AOP和Hibernate。 `cglib.jar` 是一个强大的代码生成库,全称为Code Generation Library。它...

    cglib.jar以及cglib-src.jar

    CGLib,全称为Code Generation Library,是一个强大的高性能的代码生成库,它在Java世界中被广泛应用,尤其是在动态代理和AOP(面向切面编程)领域。CGLIB是由Evan Schoolnik开发并维护的,它最初是作为Jakarta OGNL...

    cglib必须导入的包和案例

    Cglib代理,也叫作子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能的扩展. JDK的动态代理有一个限制,就是使用动态代理的对象必须实现一个或多个接口,如果想代理没有实现接口的类,就可以使用Cglib实现....

    Cglib的jar文件 Cglib.zip

    Cglib是一个强大的Java代码生成库,它在运行时动态创建子类,为现有类提供扩展功能。这个库被广泛用于实现AOP(面向切面编程)中的代理机制,特别是当无法通过接口代理时,例如Java标准库中的类。Cglib是Eclipse的...

    cglib所有jar包

    CGlib,全称为Code Generation Library,是一个强大的、高性能的代码生成库,主要为Java语言设计。它被广泛应用于许多框架中,例如Spring AOP(面向切面编程)和Hibernate ORM(对象关系映射)。CGlib允许开发者在...

    cglib2.2jar包

    **CGLIB2.2 Jar包详解** CGLIB(Code Generation Library)是一个强大的高性能的代码生成库,它被广泛应用于Java世界中的动态代理和字节码操作。CGLIB是基于ASM库来实现的,ASM是一个底层的Java字节码操控和分析...

Global site tag (gtag.js) - Google Analytics