cglib实现动态代理

对目标方法实现前置或者后置增强,
是在程序动态运行时加入增强方法的。

1. 目标类

package com.lovely.proxy.cglib;/*** 目标类* @author echo lovely* @date 2020/7/26 15:20*/
public class Target {public void save() {System.out.println("sve running...");}
}

2. 增强类

package com.lovely.proxy.cglib;/*** 增强类 拿before和afterReturning对Target中save方法增强* @author echo lovely* @date 2020/7/26 15:20*/
public class Advice {public void before() {System.out.println("前置增强...");}public void afterReturning() {System.out.println("后置增强...");}}

3. 测试demo

package com.lovely.proxy.cglib;import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Method;/*** cglib test* @author echo lovely* @date 2020/7/26 15:18*/
public class ProxyText {public static void main(String[] args) {// 创建目标类final Target target = new Target();// 增强类final Advice advice = new Advice();// 1 创建增强器Enhancer enhancer = new Enhancer();// 2 设置父类(目标类)enhancer.setSuperclass(target.getClass());// 3 设置回调enhancer.setCallback(new MethodInterceptor() { // 方法拦截器public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {advice.before(); // 方法增强Object returnValue = method.invoke(target, objects); // 调用目标方法advice.afterReturning(); // 后置方法return returnValue;}});// 4 创建代理对象Target proxy = (Target) enhancer.create();proxy.save();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fragment嵌套,viewpager嵌套 不能正确显示

转帖:http://blog.csdn.net/mybook1122/article/details/24003343 通常为 viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentsList)); 替换为 mPager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager(), fra…

三、递归树分析法

1 问题 2 解决思路 使用递归树猜想一个上界,使用归纳法证明上界也是下界。 2.1 使用递归树(recursion tree)猜想结论(不严谨) 使用递归树两点:1⃣️逐行展开;2⃣️逐行相加; 逐行…

Linux文件查看/编辑方法介绍

转载:https://www.centos.bz/2011/10/linux-file-view-edit/ cat 命令介绍 cat 命令的原含义为连接(concatenate), 用于连接多个文件内容并输出到标准输出流中(标准输出流默认为屏幕)。实际运用过程中,我们常使用它来显示文件内容…

html5input表单标签新属性

初探h5一,h5 新增表单类型二,新增表单属性三,code demo一,h5 新增表单类型 •email 邮箱地址•url 网络地址•number 数字框•range 滑块•Date pickers (date, month, week, time, datetime, datetime-local) 日期时间框•search…

关于java的JIT知识

1.JIT的工作原理图 工作原理 当JIT编译启用时(默认是启用的),JVM读入.class文件解释后,将其发给JIT编译器。JIT编译器将字节码编译成本机机器代码。 通常javac将程序源码编译,转换成java字节码,JVM通过解释…

Storage 使用

关于web项目数据存储1. 存储种类2. localStorage/sessionStorage2.1 概念2.2 api的使用3. 学生curd测试localStorage针对客户端存储讲 ——storage1. 存储种类 1. 分为服务器端和客户端的存储 2. 服务器端:1. 内存存储(临时)application session request pageConte…

信息抽取--新词提取

(纯属为了记录自己学习的点滴过程,引用资料都附在参考列表) 1 基本概念 什么是新词(是什么) 新词是一个相对的概念,每个人的标准都不一样,所以我们这里定义: 词典之外的词语(OOV)称作新词。 …

spring 基于xml方式配置aop

目录什么是aop模拟aop配置什么是aop 什么是aop 作用 在程序运行期间,在不修改源码的情况下对方法进行功能增强 优势 减少重复代码 提高开发效率 并且便于开发2.aop关键概念 模拟aop 目标接口 package com.lovely.proxy.aop;public interface TargetInterface …

word2vec相关资料

blogs: http://www.douban.com/note/323504583/ and http://www.zhihu.com/question/21661274 references: http://arxiv.org/pdf/1310.4546v1.pdf and http://www.fit.vutbr.cz/research/groups/speech/servite/2010/rnnlm_mikolov.pdf转载于:https://www.cnblogs…

信息抽取--关键词提取

(纯属为了记录自己学习的点滴过程,引用资料都附在参考列表) 1 基本概念 什么是关键词(是什么) 大略的讲就是文章中重要的单词,而不限于词语的新鲜程度。 什么样的单词是重要的单词,恐怕这是个…

h5离线缓存

html5离线缓存1. 简介1.1 什么是离线缓存1.2 优点1.3 针对对象2. 实现方式2.1 使用3. window.applicationCache对象相关api3.1 属性3.2 事件3.3 方法1. 简介 1.1 什么是离线缓存 HTML5中引入了应用程序缓存,意味着Web应用可以进行数据缓存,并可以在没有…

3389爆破DUBrute_2.1

3389专业爆破 DUBrute_2.1.zip http://pan.baidu.com/s/1pJE0t5L转载于:https://www.cnblogs.com/lieyan/p/3859696.html

信息抽取--短语提取

(纯属为了记录自己学习的点滴过程,引用资料都附在参考列表) 1 基本概念 短语提取 在信息抽取领域,另一项重要的任务就是提取中文短语,也即固定多字词表达串的识别。短语提取经常用于搜索引擎的自动推荐,文…

ACM1598并查集方法

find the most comfortable road Problem DescriptionXX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流,每条SARS都对行驶在上面的Flycar限制了固定的Speed,同时XX星人对…