当前位置: 首页 > news >正文

Cglib代理简单案例

Cglib代理简单案例

前言:
1,实现对目标类的增强
2,源码后期补齐

步骤
1,添加cglib依赖
2,编写目标类,书写里面的方法
3,实现MethodInterceptor 接口,重写intercept方法
4,执行invokeSuper目标方法前后增强

1,

        <dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version></dependency>

2,编写目标类,书写里面的方法

package service.Impl;/*** 定义普通类*/
public class PersonSayLanguageService {public void sayLanguage(String languageType){System.out.println("say," + languageType);}}

3,实现MethodInterceptor 接口,重写intercept方法

package cglib;import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;public class CglibProxy implements MethodInterceptor {// 目标对象private Object target;public CglibProxy(Object target) {this.target = target;}@Overridepublic Object intercept(Object target, Method method, Object[] objects, MethodProxy proxy) throws Throwable {// 在方法调用前进行一些处理System.out.println("Before invoking method:" + method.getName());Object result = proxy.invokeSuper(target, objects);System.out.println("After invoking method:" + method.getName());return result;}
}

4,执行invokeSuper目标方法前后增强

package test;import cglib.CglibProxy;
import net.sf.cglib.proxy.Enhancer;
import service.Impl.PersonSayLanguageService;public class CGLIBProxyExample {public static void main(String[] args) {// 1.创建目标对象PersonSayLanguageService languageService = new PersonSayLanguageService();// 2.创建CGlib代理 enhance对象Enhancer enhancer = new Enhancer();enhancer.setSuperclass(PersonSayLanguageService.class);enhancer.setCallback(new CglibProxy(languageService));// 3.创建代理对象PersonSayLanguageService proxy = (PersonSayLanguageService) enhancer.create();proxy.sayLanguage("中国话");}
}

测试结果:
在这里插入图片描述
喜欢我的文章记得点个在看,或者点赞,持续更新中ing…

http://www.lryc.cn/news/508370.html

相关文章:

  • FreeMarker语法
  • DP动态规划(装箱问题)
  • 内网IP段介绍与汇总
  • 三、ubuntu18.04安装docker
  • 数据库与表空间
  • 【CSS in Depth 2 精译_091】15.4:让 CSS 高度值过渡到自动高度 + 15.5:自定义属性的过渡设置(全新)+ 15.6:本章小结
  • Oracle中间件 SOA之 OSB 12C服务器环境搭建
  • Java设计模式 —— 【结构型模式】外观模式详解
  • 线性表实验
  • 003无重复字符的最长子串
  • 记录--uniapp 安卓端实现录音功能,保存为amr/mp3文件
  • 前端生成docx文档、excel表格、图片、pdf文件
  • c++---------流类
  • 3、基本复用原理和复用单元
  • Vue与React:前端框架的巅峰对决
  • Java 中的面向对象编程 (OOP) 概念
  • 十二月第20讲:Python中指数概率分布函数的绘图详解
  • 汽车IVI中控开发入门及进阶(44):杰发科智能座舱芯片
  • 【py脚本+logstash+es实现自动化检测工具】
  • Zookeeper的选举机制
  • 2024-05-18 前端模块化开发——ESModule模块化
  • Linux IPV6 地址配置 | IPv6 禁用 | ping6 过程细节剖析 | IPv6 排障
  • 【YashanDB知识库】XMLAGG方法的兼容
  • echarts加载区域地图,并标注点
  • echarts画风向杆
  • 【LeetCode每日一题】LeetCode 345.反转字符串中的元音字母
  • 蓝桥杯练习生第四天
  • cesium 常见的 entity 列表
  • Java旅程(五)Spring 框架与微服务架构 了解 JVM 内部原理和调优
  • Niushop-master靶场漏洞