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

使用CGLib实现Aop的功能

    博客分类:
  • java
阅读更多
1、模拟Aop拦截所有类方法
2、判断用户是否有权限,有权限就允许操作该类方法,没有权限不允许操作该类方法
(只是一个模拟,根据用户名是否为null判断是否有权限)

使用CGLib,CGLib和proxy不同,类可以不用实现接口  需要导入cglib-bodep-2.1.3.jar包
下载地址:http://ishare.iask.sina.com.cn/f/13433574.html
如果导入cglib-2.2.jar或者cglib-2.1.3.jar是会报这个异常Exception in thread "main" java.lang.NoClassDefFoundError: org/objectweb/asm/Type

下载给一个demo,已经测试通过
步骤:
1、先写好业务类型
实现类的代码
package cn.tuletech.service.impl;

public class TeacherServiceBean {
private String username = null ;
public TeacherServiceBean(){}

public String getUsername() {
return username;
}

public TeacherServiceBean(String username){
this.username = username;
}

public void teach(){
System.out.println("老师在教书");
}

public void getTeach(){
System.out.println(this.username);
System.out.println("获取教师");
}
}
2、编写CGLib工厂
package cn.tuletech.util;

import java.lang.reflect.Method;

import cn.tuletech.service.impl.TeacherServiceBean;

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

public class CGLibFactory implements MethodInterceptor{
public Object targetObject;
/**
*
* @param targetObject 目标对象
* @return Object  创建代理对象
*/
public Object createCGLibObject(Object targetObject){
this.targetObject = targetObject;
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(this.targetObject.getClass());//需要设置this.targetObject的父类,创建this.targetObject的子类会覆盖this.targetObject中所有非final修饰的方法
enhancer.setCallback(this);//设置回调
return enhancer.create();//创建代理对象

}
/**
*当类中的方法被调用可以回调这个方法
*@param object 代理对象本身
*@param method 代理对象的方法
*@param args   代理对象方法参数输入
*@param methodProxy   方法的代理对象
/
@Override
public Object intercept(Object object, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
TeacherServiceBean service = (TeacherServiceBean)this.targetObject;
Object result = null;
if(service.getUsername()!=null){
result = methodProxy.invoke(this.targetObject, args);//把对象和方法
}
return null;
}
}
1
2
分享到:
评论

相关推荐

    AOP使用CGLIB实现AOP功能

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

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

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

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

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

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

    总的来说,JavaEE CGLIB字节码增强方式提供了一种灵活的手段来实现AOP编程,它通过动态生成字节码创建目标类的子类,实现了对目标方法的拦截和增强,从而在不修改原有代码的基础上,增强了代码的功能和可维护性。...

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

    cglib aop spring 动态代理

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

    spring_aop4.rar_Home Home_jar 转换_spring AOP jar

    2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换 如何强制使用CGLIB实现AOP? * 添加CGLIB库,SPRING_HOME/...

    spring_aop_cglib的实现方式

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

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

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

    Xml配置实现AOP

    在XML配置中,我们需要定义`<aop:config>`标签来开启AOP功能,然后使用`<aop:aspect>`定义切面,`<aop:before>`、`<aop:after>`、`<aop:around>`等标签定义通知(advice),最后通过`<aop:pointcut>`定义切入点...

    实现AOP功能的jar包

    在Java领域,Spring框架是实现AOP功能的重要工具,它允许开发者定义“切面”来封装横切关注点,如日志、事务管理等,从而将这些通用功能与核心业务逻辑分离。 1. **Spring AOP**: Spring AOP是Spring框架的一部分,...

    42 离开Spring AOP,我们如何实现AOP功能?慕课专栏1

    总结来说,当我们无法使用Spring AOP时,可以借助JDK动态代理或者CGLIB来实现AOP功能。这要求我们对代理模式有深入理解,并能熟练运用反射API。通过这种方式,我们可以在任何框架或环境中实现类似Spring AOP的功能,...

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    Spring框架中的AOP模块使用了动态代理来实现AOP概念。Spring AOP允许开发者定义切面,并在这些切面中指定拦截的方法。Spring AOP支持不同的代理策略,包括JDK动态代理和CGLIB代理。如果被代理的类没有实现接口,...

    springAop.rar_AOP java_cglib_spring aop

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

    使用代理实现简易的spring aop功能

    在这个例子中,我们将探讨如何使用动态代理来实现一个简单的Spring AOP功能。 动态代理是Java提供的一种机制,它允许我们在运行时创建对象的代理,该对象可以代表原对象执行额外的操作。在Spring AOP中,有两种主要...

    CGlib实现动态代理(承接上面JDK实现动态代理)

    在Java中,CGlib是一个非常重要的工具,特别是在AOP(面向切面编程)和ORM(对象关系映射)框架中,如Spring和Hibernate广泛使用它来实现代理功能。 CGlib动态代理的工作原理是通过继承被代理的目标类来创建子类,...

    AOP、CGLIB

    在Spring AOP中,CGLIB被用来创建代理对象,当目标对象没有实现接口时,Spring会使用CGLIB来动态生成子类,以此实现对目标对象的代理。CGLIB的使用避免了反射带来的性能损失,提高了代理效率。 CGLIB的工作原理: ...

    cglib及其依赖包

    在Spring框架中,CGLib被用作AOP代理的一个重要组件,特别是在没有实现接口的类上创建代理对象时,Spring会默认使用CGLib。 CGLib的工作原理是基于ASM库,ASM是一个字节码操作和分析框架,它可以用来动态生成类或...

    Spring实现AOP的4种方式 - Java -

    在Java编程领域,Spring框架以其强大的功能和灵活性深受开发者喜爱,尤其在面向切面编程(AOP)方面,Spring提供了多种实现方式。AOP是一种编程范式,它允许程序员定义“切面”,这些切面可以封装关注点,如日志、...

    cglib实现动态代理依赖jar包

    在实际应用中,CGLib通常与AOP框架结合使用,如Spring AOP,它可以拦截并增强方法的执行,实现如日志记录、事务管理、权限控制等功能。同时,由于CGLib不需要目标类实现接口,因此对于那些无法修改源代码的第三方库...

Global site tag (gtag.js) - Google Analytics