spring中的Cglib字节码增强实现AOP
来源:互联网 发布:植村秀淘宝旗舰店 编辑:程序博客网 时间:2024/06/18 16:24
我们在使用jdk提供的动态代理时,目标类要求必须是一个接口,而有些情况下目标类没有任何父类,这时就可以使用cglib字节码增强的方式实现
cglib可以在没有接口只有实现类的情况下进行AOP
步骤一:导包
spring-core-3.2.0.jar包中包含asm.jar和cglib.jar这两个jar包是核心包
步骤二:编写目标类
package com.wency.service;public class BookServiceImpl {public void addBook(){System.out.println("添加书籍");}public void deleteBook(){System.out.println("删除书籍");}}
步骤三:编写切面类
package com.wency.aspect;/** * 切面类 * @author zhangwen * */public class MyAspect {public void before(){System.out.println("执行前方法");}public void after(){System.out.println("执行后方法");}}
步骤四:编写工厂类
package com.wency.factory;import java.lang.reflect.Method;import org.springframework.cglib.proxy.Enhancer;import org.springframework.cglib.proxy.MethodInterceptor;import org.springframework.cglib.proxy.MethodProxy;import com.wency.aspect.MyAspect;import com.wency.service.BookServiceImpl;public class CglibFactory {public BookServiceImpl createBookService(){//1.创建切面类final MyAspect myAspect=new MyAspect();//2.创建目标类final BookServiceImpl bookService=new BookServiceImpl();//3.创建增强类Enhancer enhancer=new Enhancer();//4.设置增强类的父类enhancer.setSuperclass(BookServiceImpl.class);//5.设置回调函数enhancer.setCallback(new MethodInterceptor() {@Overridepublic Object intercept(Object obj, Method method, Object[] args,MethodProxy arg3) throws Throwable {// TODO Auto-generated method stub//执行前方法myAspect.before();//执行目标类的方法Object object = method.invoke(bookService, args);//执行后方法myAspect.after();return object;}});//6.创建代理类BookServiceImpl bookServiceImpl=(BookServiceImpl) enhancer.create();return bookServiceImpl;}}
步骤五:编写测试类
package com.wency.test;import org.junit.Test;import com.wency.factory.CglibFactory;import com.wency.service.BookServiceImpl;public class TestBookService {@Testpublic void testCglibProxy(){CglibFactory cglibFactory=new CglibFactory();BookServiceImpl bookService = cglibFactory.createBookService();bookService.addBook();bookService.deleteBook();}}
后台的输出信息:
执行前方法
添加书籍
执行后方法
执行前方法
删除书籍
执行后方法
阅读全文
0 0
- spring中的Cglib字节码增强实现AOP
- Spring(九)CGLIB字节码增强
- Spring-AOP-cglib实现
- spring AOP动态代理和CGLIB字节码生成
- Spring AOP,基于动态代理和字节码(CGLIB)区别
- 字节码增强和AOP
- spring AOP理解——spring中的CGLIB实现AOP功能
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与CGLIB应用
- Spring AOP 实现原理与 CGLIB 应用
- 【spring aop】实现原理与 CGLIB 应用
- Spring AOP实现原理与CGLIB应用
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与CGLIB应用
- Spring AOP 实现原理与 CGLIB 应用
- 活动界面重复返回
- 在ubuntu下编译多个C++文件
- 学习互联网架构第八课(单例和多线程)
- 多个Fragment界面重叠和拍照闪退问题
- NPOI的文件流
- spring中的Cglib字节码增强实现AOP
- css揭秘读书笔记(一)
- 自定义分页
- 【PB】PB画板介绍
- Model传值的学习
- 制作logo
- TCP/IP
- 内存模块:BSS段、数据段、代码段、堆与栈
- 关于ToolBar+DrawerLayout的小结