java动态代理--cglib代理

1.概述

CGLIB动态代理是针对类实现代理(无需实现接口),为了弥补jdk的不足,

Cglib 不基于接口,是基于父子的继承关系(被代理的对象是代理对象的父类),通过重写的形式扩展方法

2.定义需要代理的service

/**
 * 被代理的对象不需要接口
 */
public class WanghongService {
    
    public int yuehui(String name){
        System.out.println("做了榜一大哥,线下见面:" + name + ",做泰迪狗干的事");
        return 1;
    }

}

3.继承:MethodInterceptor

public class MyMethodIntercepter implements MethodInterceptor {
    /**
     * 给拦截的目标方法做增强
     * @param o 被代理的对象
     * @param method 被代理对象的目标方法
     * @param objects 执行目标方法的参数
     * @param methodProxy 代理对象
     * @return
     * @throws Throwable
     */
    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        this.tuoKuzi();
        // 执行目标方法
        Object result = methodProxy.invokeSuper(o, objects);
        this.chuanKuzi();
        return result;
    }

    private void chuanKuzi() {
        System.out.println("后置:大威德3秒就结束了,提起裤子");
    }

    private void tuoKuzi() {
        System.out.println("前置:大威德脱裤子,带上冈本");
    }


    public Object getProxyInstance(Object obj) {
        //1.使用enhancer 生成代理对象---cglib增强类
        Enhancer enhancer = new Enhancer();
        // 2.为代理对象设置父类
        enhancer.setSuperclass(obj.getClass());
        //3. 设置回调函数--调用service的yuehui方法之后,会调用方法拦截器中的intercept
        enhancer.setCallback(this);
        //4. 创建子类对象,即代理对象
        Object proxyObj = enhancer.create();
        // 返回代理对象
        return proxyObj;
    }
}

4.test方法

public class CglibTest {

    public static void main(String[] args) {
      

        MyMethodIntercepter cgLibProxy = new MyMethodIntercepter();
        //返回一个代理类的对象--注意这里现在传入的是实现类
        WanghongService wanghongService = new WanghongService();
        WanghongService proxyService2 = (WanghongService)cgLibProxy.getProxyInstance(wanghongService);
        proxyService2.yuehui("李采潭");
    }

}

 5.运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

带头循环双向链表专题

1. 双向链表的结构 带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这⾥“放哨 的” “哨兵位”存在的意义: 遍历循环链表避免死循环。 2. 双向链表的实现 2.1双向链表结构 typedef int DataTyp…

【光伏科普】光伏软件都有些什么功能?

光伏软件是为满足光伏行业特定需求而设计的工具,它涵盖了多个方面的功能,以支持光伏系统的设计、分析、优化和运营。以下是光伏软件通常具备的一些核心功能: 1.光伏系统设计 组件布局优化:根据地理位置、光照条件、阴影遮挡等因素…

开源在线表单工具 HeyForm 使用教程

HeyForm 是一个非常出色的开源在线表单工具,可以通过直观的拖拽式编辑器,快速构建出美观实用的表单。 HeyForm 的功能非常丰富: 支持丰富的输入类型,从基础的文本、数字到高级的图片选择、日期选择、文件上传等,一应俱…

Java web第三次作业

springboot入门程序撰写并启动 2.使用postman练习参数的获取。 简单参数 复杂参数 数组参数 日期参数 json参数 路径参数 3、体会前端页面向后端发送数据的过程。并且自己尝试将之前的注册页面的信息发送到服务端。 (1)、product.html的操作代码&#…

后端返回的数据中含有Null的则不在前端展示

方式 1:application 上加配置 只需要在配置文件 上,增加 如下配置。 application 格式配置: spring.jackson.default-property-inclusionnon_null yml 格式配置: spring:jackson:default-property-inclusion: non_null注意&a…

数字逻辑课程实验环境配置与使用说明

文章目录 I.虚拟机搭建1.1 Vmware安装1.2 Win XP安装1.3 xftp7安装 I. Quartus II安装II. 使用说明2.1 新建工程2.2 在工程中加入代码2.3 代码编译波形仿真 I.虚拟机搭建 1.1 Vmware安装 Vmware17安装教程 1.2 Win XP安装 Win XP安装教程 1.3 xftp7安装 给虚拟机添加FTP …

【团体程序设计天梯赛 往年关键真题 详细分析完整AC代码】L2-009 抢红包(排序) L2-010 排座位 (dfs)

【团体程序设计天梯赛 往年关键真题 详细分析&完整AC代码】搞懂了赛场上拿下就稳 【团体程序设计天梯赛 往年关键真题 25分题合集 详细分析&完整AC代码】(L2-001 - L2-024)搞懂了赛场上拿下就稳了 【团体程序设计天梯赛 往年关键真题 25分题合…

MCU最小系统的电源模块设计和复位模块的设计

最小操作系统就是一个电路,这个电路里面必须要的东西(如人需要喝水吃饭温度等情况,才能或者) 现在我们要解决这三个问题 这里V开头的,都是电源管脚 这里解释一下: 这里要注意哪些是电路电压,哪…

盲人导航功能特点:革新出行体验的实时避障应用深度解析

作为一名资深记者,我有幸亲历并详尽报道一款专为盲人群体设计的导航应用叫做蝙蝠避障,它不仅提供了精准的路线指引,更创新性地融入了实时避障功能。这款应用凭借其盲人导航功能特点,正以前所未有的方式提升盲人的出行自由度与安全…

YOLOv9最新改进系列:YOLOv9改进加入新型高效的多尺度注意力(EMA)模块保留每个通道的信息并减少计算成本!助力v9检测性能遥遥领先!

YOLOv9最新改进系列:YOLOv9改进加入新型高效的多尺度注意力(EMA)模块保留每个通道的信息并减少计算成本!助力v9检测性能遥遥领先! YOLOv9原文链接戳这里,原文全文翻译请关注B站Ai学术叫叫首er 详细的改进…

SqlServer专题

目录 1,连接数据库 2,连接池 1.何为连接池? 2.连接池运行原理。 3.如何查看连接池? 4.连接池注意事项。 3,一般SQL语句。 4,控制语句 1.判断语句 2.循环语句 5,视图 1.使用…

Java高阶私房菜:快速学会异步编程CompletableFuture

为了使主程代码不受阻塞之苦,一般使用异步编程,而异步编程架构在JDK1.5便已有了雏形,主要通过Future和Callable实现,但其操作方法十分繁琐,想要异步获取结果,通常要以轮询的方式去获取结果,具体如下&#x…

电脑开不了机?不要慌,三招教你快速解决!

电脑开不了机是我们在日常使用中可能遇到的一个严重问题,它会影响我们的工作和生活。了解如何解决电脑开不了机的问题对于维护电脑正常运行至关重要。本文将介绍三种常见的解决电脑开不了机的方法,帮助您快速恢复电脑的正常使用。 方法1:检查…

Java实现生成中间带图标的二维码

Java实现生成中间带图标的二维码 生成Base64格式的二维码,返回html渲染 package your.package;import com.google.zxing.*; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcod…

flask 应用程序

flask 程序示例 创建 hello.py 文件: # 导入 Flask 模块。Flask 类的一个对象是 wsgi 应用程序。 from flask import Flask# 创建app对象, Flask构造函数将当前模块的名称(__name__)作为参数。 app Flask(__name__)# route() 函数是一个装饰器,它告诉应…

Linux上安装mysql指南

最近入职了新单位,申请到了一台cvm。我这个机子是redhat的linux发行版,就用rpm包安装工具就行。下面把我趟过的一些坑写在这里,希望对您有帮助。 一开始,我自己下载了安装包,装了一个这个社区版的,rpm -qa…

鸿蒙入门05-真机运行“遥遥领先”

如果你有一台真的 "遥遥领先"那么是可以直接在手机上真机运行你的项目的我们也来尝试一下运行 一、手机设置开发者模式 打开手机设置 打开手机设置界面 向下滑动到关于手机位置 快速连续点击版本号位置 下图所示位置快速连续点击 打开 3 - 5 次即可 会提示您已经进…

【R语言】动画图:散点图

绘制成如下的散点图: 如果数据量大,有多个年份,就会生成多张图,例如: 具体代码如下: library(gapminder)#加载 gapminder 包,其中包含了从 1952 年至 2007 年各个国家的 GDP、预期寿命和人口数据…

目标检测——鱼类数据集

一、重要性及意义 生物多样性保护与监测: 鱼类识别是生物多样性保护工作的关键一环。通过准确识别不同种类的鱼类,科学家能够更好地了解它们的分布、种群数量以及栖息地状况,从而制定更为有效的保护措施。鱼类是水域生态系统的重要组成部分…

通过阿里云向量检索 Milvus 版和通义千问快速构建基于专属知识库的问答系统

背景介绍 阿里云向量检索 Milvus 版是一款 Serverless 全托管服务,确保了与开源 Milvus 的完全兼容性,并支持无缝迁移。它在开源版本的基础上增强了可扩展性,能提供大规模 AI 向量数据的相似性检索服务。凭借其开箱即用的特性、灵活的扩展能力…