`
yjshengshe
  • 浏览: 204610 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

cglib-aop

 
阅读更多

 

//cglib代理

通过cglib创建代理类,好处是不要求我们的目标对象实现接口

 

1 准备架包

  asm.jar

  cglib.jar

 

2 man(要代理的对象)的编写

package com.aop.cglib;

public class Man {

private String name;

public Man()

{

}

public Man(String name)

{

this.name = name;

}

public void addMan()

{

System.out.println("add Man");

}

public void deltMan()

{

System.out.println("delete Man");

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

 

 

3 代理工厂CglibProxy的编写

 

package com.aop.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 CglibProxy implements MethodInterceptor {

private Object o;

/**

* 创建要代理的对象,并返回

* @param o

* @return

*/

public Object crateProxyObject(Object o)

{

this.o = o;

Enhancer eh = new Enhancer();

eh.setSuperclass(o.getClass());

eh.setCallback(this);

return eh.create();

}

@Override

public Object intercept(Object arg0, Method arg1, Object[] arg2,

MethodProxy arg3) throws Throwable {

// TODO Auto-generated method stub

Man man = (Man)o;

String name = man.getName();

Object result = "none";

if(name != null && !name.equals(""))

{

result = arg3.invoke(o, arg2);

}

System.out.println("result:"+result);

return result;

}

}

 

 

4 测试类TestProxy的编写

 

package com.aop.cglib;

 

public class TestProxy {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

CglibProxy c = new CglibProxy();

Man man = (Man)c.crateProxyObject(new Man("1"));

man.addMan();

man.deltMan();

}

}

 

5 总结

根据程序可知:

如果man对象的name为空,则man的方法被拦截,不会执行

如果man对象的name不为空,则arg3.invoke(o, arg2)方法执行

 

分享到:
评论

相关推荐

    spring-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.1.jar

    在这个问题中,我们遇到了两个关键的jar包:`spring-cglib-repack-3.2.0.jar`和`spring-objenesis-repack-2.1.jar`。这两个jar包对于理解Spring框架的工作原理以及它们在实际应用中的作用至关重要。 首先,`spring-...

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

    2. **AOP(面向切面编程)**:CGLIB常被用于实现AOP框架,例如Spring AOP。在Spring中,如果没有使用接口,那么默认会使用CGLIB来创建代理,以便在方法调用前后插入切面逻辑。 3. **性能优化**:由于CGLIB是基于...

    com.springsource.net.sf.cglib-2.2.0 aop依赖包

    com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.net.sf.cglib-2.2.0.jar

    spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.5.1.jar

    CGLIB是一个强大的高性能的代码生成库,它在许多AOP框架中被用到,包括Spring。当Spring框架在进行AOP代理时,如果目标类没有实现接口,它会选择使用CGLIB来创建一个子类并动态地插入拦截器方法。CGLIB通过字节码...

    spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.ja及ck-2.5.1.jar

    CGLIB是一个强大的高性能的代码生成库,它在许多AOP(面向切面编程)的实现中被使用,比如Spring AOP。CGLIB通过字节码操作技术,在运行时动态创建子类并增强方法。在Spring中,当目标对象不支持代理(如final类)...

    强势推送cglib-full-2.0及cglib-full-2.0.2

    - **AOP(面向切面编程)**:Spring AOP框架就利用CGLib实现对非接口类的代理,通过在目标方法前后插入增强代码,实现切面功能。 - **ORM(对象关系映射)**:Hibernate等ORM框架在无法使用JDK动态代理(即目标类...

    cglib-2.2.0.jar cglib-nodep-2.2.jar

    在Java开发中,CGLib是一个不可或缺的工具,尤其在AOP(面向切面编程)和ORM(对象关系映射)等领域广泛应用。 `cglib-nodep-2.2.jar` 和 `cglib-2.2.0.jar` 是CGLib的两个不同版本。`nodep` 在这里表示 "no ...

    spring-cglib-repack-3.2.6.jar,spring-objenesis-repack-2.6.jarspring-cglib-repack

    在Spring框架中,CGLIB被广泛用于AOP(面向切面编程)代理。当目标对象不支持接口或者为了提高性能时,Spring会使用CGLIB代理来创建代理对象。`spring-cglib-repack-3.2.6.jar` 包含了CGLIB库的重新打包版本,可能包含...

    spring-cglib-repack-3.2.6.jar和spring-objenesis-repack-2.6.jar

    当目标对象不支持接口时(即,它只是一个普通的Java类),Spring会利用CGlib创建目标对象的子类,并在子类中拦截方法调用,这样就能实现AOP(面向切面编程)的功能。例如,Spring的事务管理、缓存管理和性能监控等...

    cglib-nodep-2.1_3.jar

    CGlib-nodep-2.1_3.jar 是一个与Java编程相关的库,主要用来扩展Java反射功能,特别是在处理面向切面编程(AOP)时。它是一个无依赖(nodep)版本,意味着它包含了所有必需的类,无需额外导入其他库,如ASM库。这个...

    spring-cglib-repack-3.1.jar,spring-objenesis-repack-2.1.jar

    CGLIB是一个强大的代码生成库,常被用作Java代理机制,尤其在Spring AOP(面向切面编程)中。当Spring需要为目标对象创建代理以便实现方法拦截时,如果目标类没有实现接口,CGLIB就会派上用场,生成一个该类的子类,...

    spring导入eclipse时少的spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar

    在Spring框架中,CGlib被用来实现AOP(面向切面编程)中的代理机制。当目标对象不支持接口(即为final类或者没有接口的类)时,Spring会使用CGlib来创建代理对象。通过这种方式,Spring能够注入切面逻辑,比如日志...

    spring-cglib-repack-3.2.5.jar和spring-objenesis-repack-2.6.jar

    在Spring框架中,CGLIB主要被用于AOP(面向切面编程)的实现。当Spring需要对某个目标对象进行代理,但该对象不支持接口时,就会使用CGLIB。CGLIB通过字节码生成技术,为原始类创建一个子类,并在子类中拦截方法调用...

    spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.jar

    CGLIB是一个高性能的代码生成库,它在许多Java框架中被广泛使用,如Spring AOP。CGLIB能够生成子类,从而实现对目标类的代理。在Spring中,当一个类没有实现接口时,Spring会使用CGLIB来创建代理对象,以便在不修改...

    com.springsource.net.sf.cglib-2.2.0.jar

    aop的jar包: com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

    cglib-2.0.2.jar

    CGlib是许多其他框架如Spring AOP和Hibernate的重要组成部分,它们依赖于CGlib来实现动态代理和代码增强功能。 **CGlib的基本原理** CGlib通过ASM库(一个Java字节码操控和分析框架)工作,它可以在运行时动态地...

    hibernate-cglib-repack-2.1_3.jar

    而CGLIB则是一个代码生成库,它允许开发者在运行时动态创建子类,这对于面向切面编程(AOP)和扩展已有类的功能至关重要。当Hibernate与CGLIB结合使用时,可以实现对未声明为final的类的透明代理,进一步提升ORM的...

    spring-cglib-repack-3.2.5.jar spring-objenesis-repack-2.5.1.jar

    在Spring框架中,CGLIB主要被用来创建代理对象,特别是在没有实现接口的类上进行AOP(面向切面编程)操作。CGLIB通过生成子类并在子类的方法上插入拦截器来实现动态代理。"spring-cglib-repack-3.2.5.jar" 是CGLIB库...

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

    CGLib,全称Code Generation Library,是一个强大的高性能的代码生成库,它在Java世界中被广泛使用,特别是在动态代理和AOP(面向切面编程)领域。这个库允许开发者在运行时动态创建类或者增强已有类的功能。在本篇...

Global site tag (gtag.js) - Google Analytics