`

AOP_使用CGLIB实现AOP功能

 
阅读更多

好处:不需要目标对象实现接口

使用的架包:cglib-nodep-2.1_3.jar

实例:使用CGLIB实现AOP功能

         拦截所以业务层方法,模拟用户验证(用户为null,即没用权限)

PersonServiceImp.java

/**
 * 业务层,被拦截对象
 */
package com.qh.service.imp;
public class PersonServiceImp {
	String user = null;//用户
	// 获得用户信息的方法
	public String getUser() {
		return user;
	}

	public PersonServiceImp() {
	}

	public PersonServiceImp(String user) {
		this.user = user;
	}

	public void save(String name) {
		System.out.println("我是save()方法"+name);
	}

	public void update(String name, int id) {
		System.out.println("我是update()方法");
	}

	public String getPersonName(int id) {
		return "我是getPersonName()方法";
	}

}

 CGlibProxyFactory.java

package com.qh.aop;

import java.lang.reflect.Method;

import com.qh.service.imp.PersonServiceImp;

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

public class CGlibProxyFactory implements MethodInterceptor{
	private Object targetObject;//目标对象
	//创建代理对象
	public Object createProxyIntance(Object targetObject){
		this.targetObject=targetObject;
		//创建代理对象
		Enhancer enhancer=new Enhancer();
		/*
		 * 设置其父类,即目标类;这时他会产生一个目标类的子类,
		 * 该子类可以覆盖父类中所有非final的方法,并添加一些自身的代码
		 */
		enhancer.setSuperclass(this.targetObject.getClass());
		//设置回调,并需要实现MethodInterceptor接口,回调intercept()方法
		enhancer.setCallback(this);
		return enhancer.create();//返回一个代理对象
	}
	//接口中的方法
	//参数说明:代理对象本身、被拦截到的方法、方法的输入参数、方法的代理对象
	public Object intercept(Object proxy, Method method, Object[] args,
			MethodProxy methodProxy) throws Throwable {
		PersonServiceImp personServiceImp=(PersonServiceImp)this.targetObject;
		Object result=null;
		if(personServiceImp.getUser()!=null){
			result=methodProxy.invoke(this.targetObject, args);
		}
		return result;
	}
}

 AOPTest.java

package com.qh.test;
import org.junit.Test;
import com.qh.aop.CGlibProxyFactory;
import com.qh.service.imp.PersonServiceImp;

public class AOPTest {

	@Test
	public void test() {
		CGlibProxyFactory cGlibProxyFactory = new CGlibProxyFactory();
		//cGlibProxyFactory创建的类是PersonServiceImp的子类
		PersonServiceImp imp = (PersonServiceImp) cGlibProxyFactory
				.createProxyIntance(new PersonServiceImp("xh"));
		imp.save("熊晖");
	}

}

 

分享到:
评论

相关推荐

    spring_aop_cglib的实现方式

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

    springAop.rar_AOP java_cglib_spring aop

    CGLIB是一个强大的高性能的代码生成库,它在许多AOP的实现中被用到,比如Spring AOP。CGLIB使用字节码技术为一个类创建子类,并在子类中拦截方法调用,从而实现代理。CGLIB生成的子类是动态的,因此在编译时并不存在...

    AOP使用CGLIB实现AOP功能

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

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

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

    spring_AOP.rar_876.aop_java aop_spring_aop

    1. Spring_AOP_DynProxy:这可能包含有关Spring动态代理的资料,Spring使用JDK动态代理或CGLIB来创建代理对象,实现AOP的功能。 2. ch20_aop_annotation:这部分内容可能是关于使用注解来定义和实现切面的教程。 3. ...

    Spring_AOP_学习小结 Spring_AOP_学习小结 Spring_AOP_学习小结

    Spring AOP,即面向切面编程,是Spring框架的核心组件之一,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强。本篇文章将详细阐述Spring AOP的基本概念、种类、代理原理、通知类型以及切入点,帮助你...

    spring_aop_xml.rar_java aop_xml aop

    在实际的`spring_aop_xml`压缩包中,应该包含了相关的XML配置文件、服务接口及其实现类、通知类等,通过这些文件可以更好地理解和学习如何在XML中配置和使用Spring AOP。通过深入学习和实践,你将能熟练掌握这一强大...

    学习Spring笔记_AOP_Annotation实现和XML实现

    这篇“学习Spring笔记_AOP_Annotation实现和XML实现”主要探讨了如何在Spring中利用注解和XML配置来实现AOP的概念。 AOP,全称Aspect-Oriented Programming,是一种编程范式,旨在将关注点分离,让开发者可以更专注...

    spring_2.5_aop_lib.zip

    本文将围绕"spring_2.5_aop_lib.zip"这个压缩包中的相关库进行深入探讨,了解它们如何协同工作,以实现AOP的功能。 首先,我们看到压缩包内的aspectjweaver.jar,这是AspectJ的编织器,它负责在运行时或编译时将切...

    cglib_cglib3.2_remain3gr_cglibjar包_cglib.jar_

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

    基于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)...

    aop_lib.rar

    总的来说,"aop_lib.rar"提供了全面的Spring AOP开发环境,使得开发者无需关心底层实现,只需关注业务逻辑,从而提高代码的可复用性和可维护性。在实际项目中,正确配置和使用这些库,能够有效地提升软件的架构质量...

    aop.zip_884AOP_java aop原理_javaaop原理

    - CGLIB代理:如果目标类没有实现接口,Spring会使用CGLIB库创建目标类的子类,并在子类的方法中插入通知代码。 2. **基于AspectJ的AOP**: - Spring支持使用AspectJ的注解和配置来声明切面,包括@Aspect、@...

    Aop.rar_aop_java aop 例 proxy

    本资源"Aop.rar"包含了一个关于Java AOP的实际应用示例,重点展示了三种主要的代理实现方式:CGLIB、Javassist和Java动态代理。让我们逐一深入了解这三种技术。 1. **CGLIB(Code Generation Library)**: CGLIB...

    Aop.rar_aop_java aop

    如果没有,它会使用CGLIB生成一个子类来实现AOP。 2. **基于注解的AOP**:Spring提供了一系列的注解,如`@Aspect`、`@Before`、`@After`、`@Around`、`@AfterReturning`、`@AfterThrowing`,使得AOP配置更加简洁,...

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

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

    spring aop_aopalliance.jar_aspectjweaver.jar

    在Spring AOP中,你可以使用这些接口来实现自定义的拦截器,从而在方法调用前后插入额外的功能,如日志记录、事务管理等。 接着,我们来看`aspectjweaver.jar`。AspectJ是Spring AOP支持的一个强大的第三方AOP框架...

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

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

    Spring示例_Printer_Spring_AOP_Spring_Proxy

    在本示例中,"Spring示例_Printer_Spring_AOP_Spring_Proxy" 主要关注的是Spring框架中的核心概念,特别是AOP(面向切面编程)和代理模式的应用。让我们深入探讨这些知识点。 首先,Spring框架是Java开发中最常用的...

    spring_aop_拦截实例

    至于"使用AOP来做权限控制.pdf",这可能涉及到如何使用AOP来实现细粒度的访问控制。通过在拦截器中检查用户角色、权限或会话状态,我们可以阻止未经授权的访问。这通常结合Spring Security或自定义的认证和授权机制...

Global site tag (gtag.js) - Google Analytics