`
8366
  • 浏览: 809264 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

第16讲 --使用CGLIB实现AOP功能与AOP概念解释

阅读更多

 

当代理对象没有实现接口,我们就可以 使用CGLIB生成代理 ,需要我们使用 cglib-nodep-2.1_3.jar

修改上一讲的代理工厂类  ,命名为CGlibProxyFactory ,需要实现 MethodInterceptor 接口

 

public class CGLIBProxy 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 {
		return methodProxy.invoke(this.targetObject, args);
	}
}
CGLIB可以生成目标类的子类,并重写父类非final修饰符的方法。

 

 

测试:

 

CGlibProxyFactory factory = new CGlibProxyFactory();
			PersionServiceBean service = (PersionServiceBean) factory.createProxyIntance(new PersionServiceBean("xxx"));
			service.save("999");

 

结果:略

 

 

AOP中的概念

Aspect(切面):指横切性关注点的抽象即为切面,它与类相似,只是两者的关注点不一样,类是对物体特征的抽象,而切面横切性关注点的抽象.

 

joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点,实际上joinpoint还可以是field或类构造器)

 

Pointcut(切入点):所谓切入点是指我们要对那些joinpoint进行拦截的定义.

 

Advice(通知):所谓通知是指拦截到joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知

 

Target(目标对象):代理的目标对象

 

Weave(织入):指将aspects应用到target对象并导致proxy对象创建的过程称为织入.

 

Introduction(引入):在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.

 

 

总结:

JDK动态代理 : 需要代理的对象要实现接口,代理对象要实现 InvocationHandler  接口
 
使用CGLIB生成代理 : 需要代理的对象可以不用实现接口,代理对象要实现 MethodInterceptor  接口
分享到:
评论

相关推荐

    Spring学习笔记(14)----使用CGLIB实现AOP功能

    在本篇Spring学习笔记中,我们将探讨如何使用CGLIB库来实现AOP功能。 CGLIB(Code Generation Library)是一个强大的高性能的代码生成库,它被广泛用于动态代理和运行时织入AOP切面。在Spring中,如果目标类没有...

    AOP使用CGLIB实现AOP功能

    Spring AOP实现方法之一:CGLIB 实现AOP功能

    使用JDK中的Proxy技术实现AOP功能与使用CGLIB实现AOP功能

    本篇将深入探讨如何使用JDK的动态代理和CGLIB库来实现Spring中的AOP功能。 首先,我们来看JDK中的Proxy技术。JDK Proxy是Java提供的一种动态代理机制,它允许我们在运行时创建一个实现了特定接口的新类。这个新类...

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

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

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

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

    AOP-CGLIB学习-实现简单的注解权限系统

    标题中的"AOP-CGLIB学习-实现简单的注解权限系统"指的是使用Spring的面向切面编程(AOP)特性,结合CGLIB库来创建一个基于注解的权限控制系统。在这个系统中,通过CGLIB动态代理技术,可以对带有特定注解的方法进行...

    SpringMVC3.0-Jar全量包含cglib几个包-aop的aspectj几个包

    在Spring中,当无法为接口创建代理(如目标类没有接口)时,CGLIB被用来创建目标类的子类,并在子类中插入拦截器,实现AOP功能。 4. **ASM**:ASM是一个Java字节码操控和分析框架,可以用来动态生成类或者增强已有...

    spring_aop_cglib的实现方式

    在Spring AOP(面向切面编程)中,CGLIB是一个重要的动态代理库,它用于在运行时创建子类以实现对目标对象的代理。CGLIB是针对那些不支持接口代理(例如Java中的final类)的情况而设计的。下面我们将深入探讨Spring ...

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

    例如,在Spring AOP中,当使用基于代理的切面时,如果目标类不能实现接口(即使用的是基于类的代理),Spring就会利用CGLib来生成一个目标类的子类。 CGLib的运作原理基于ASM库,ASM是一个底层的Java字节码操作框架...

    基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)

    基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)...

    JavaEE CGLIB字节码增强方式实现AOP编程

    JavaEE CGLIB字节码增强技术是实现面向切面编程(AOP)的一种常见方法。在JavaEE应用中,AOP允许开发者定义“切面”,这些切面封装了跨越多个对象的横切关注点,如日志、事务管理等。CGLIB(Code Generation Library...

    spring-boot aop

    默认情况下,Spring使用基于Java的代理,但对于需要在静态方法或非Spring管理对象上应用AOP的情况,可能需要使用CGLIB或AspectJ字节码代理。 5. **理解代理行为**:理解Spring AOP代理的工作方式很重要,因为这可能...

    asm-all&&cglib

    3. **AOP实现**:在Spring框架中,如果没有找到目标类的接口,它会使用CGlib作为动态代理技术来实现AOP。 4. **测试工具**:在单元测试中,CGlib可以用于模拟复杂的依赖关系,比如Mockito框架就使用了CGlib。 在...

    spring-demo20-CGLIB动态代理.zip

    本示例"spring-demo20-CGLIB动态代理.zip"主要展示了如何使用CGLIB库在Spring框架中实现动态代理。 CGLIB(Code Generation Library)是一个强大的高性能的代码生成库,它在许多AOP框架中被使用,如Spring AOP和...

    cglib aop spring 动态代理

    静态代理--不适合企业开发,适合初学者理解代理。 jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口...spring 的AOP功能中 会根据目标类是否实现了接口来判断使用 jdk Proxy还是cglib

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

    标题中的"spring-cglib-repack-3.2.5.jar"和"spring-objenesis-repack-2.6.jar"是两个与Spring框架相关的库文件,它们主要用于Spring框架的内部实现,尤其是针对Java对象的创建和代理机制。下面将详细解释这两个库的...

    深入字节码 -- 使用 ASM 实现 AOP1

    与 Spring、AspectJ 和 CGLib 等 AOP 框架相比,ASM 更底层,灵活性更高,但学习曲线更陡峭。Spring 和 AspectJ 提供了更高级别的抽象,使得开发者可以通过更直观的方式定义切面,而不需要直接操作字节码。 总的来...

    spring-aop.rar_java aop

    **Spring AOP 概念** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组件,它提供了面向切面的编程能力,允许开发者定义“方面”来封装横切关注点,如日志、事务管理、性能监控...

    java-用Java动态代理实现AOP.pdf

    Spring AOP默认使用CGLIB,但如果目标类实现了接口,它也会选择使用JDK动态代理。 总之,AOP通过动态代理技术,实现了在不修改原有代码的情况下,为业务逻辑添加额外功能的能力,提高了代码的模块化和可扩展性。...

Global site tag (gtag.js) - Google Analytics