SpringBoot高手之路jdk动态代理

news2024/11/20 20:42:54

文章目录

  • JDK动态代理
  • 基于jdk的动态代理
  • Aop底层就是基于动态代理实现的
  • 实现代码
    • 先写代理对象工具


JDK动态代理

在这里插入图片描述

基于jdk的动态代理

业务需求 通过动态代理技术,对service层的方法统计执行时间–创建代理对象

Aop底层就是基于动态代理实现的

jdk动态代理技术是基于接口做的代理

没有接口的类不能做动态代理

代理对象与目标对象是兄弟关系

他们都实现的是同一个接口

实现代码

先写代理对象工具

首先分析代理对象工具类的作用就是用于生成代理对象的,那么需要代理对象就需要先有一个原始对象

通过原始对象创建出代理对象,因为需要根据原始对象的字节码找到代理对象
还有接口

所以生成代理对象就需要将初始对象传入进去

并且实现代理对象需要 是需要接口

如果初始对象没有接口那么就不能实现代理

那么先写接口

写service层的接口与实现类

package com.itheima.service;

/**
 * @author healer
 * @Description DeptService
 * @data 2024-06-08 14:42
 */
public interface DeptService {


    void list();

    void delete();

    void update();

    void insert();
}

package com.itheima.service.impl;

import com.itheima.service.DeptService;

/**
 * @author healer
 * @Description DeptServiceImpl
 * @data 2024-06-08 14:42
 */
public class DeptServiceImpl implements DeptService {


    
    public void list() {
        System.out.println("list........");
    }

    
    public void delete() {
        System.out.println("delete........");
    }

    
    public void update() {
        System.out.println("update........");
    }

    
    public void insert() {
        System.out.println("insert........");
    }
}

package com.itheima.jdkProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.security.PublicKey;

/**
 * @author healer
 * @Description jdkCreateUtil
 * @data 2024-06-08 14:44
 */
public class JdkProxyUtil {

    public static Object createProxy(Object targetClass) {
        return Proxy.newProxyInstance(targetClass.getClass().getClassLoader(), targetClass.getClass().getInterfaces(), new InvocationHandler() {
            
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

                long start = System.currentTimeMillis();
                Object result = method.invoke(targetClass, args);
                long end = System.currentTimeMillis();

                System.out.println("-------->方法耗时:" + (end - start) + "ms");
                return result;
            }
        });
    }
}

package com.itheima.jdkProxy;

import com.itheima.service.DeptService;
import com.itheima.service.impl.DeptServiceImpl;

/**

  • @author healer

  • @Description JdkProxyDemo

  • @data 2024-06-08 14:48
    */
    public class JdkProxyDemo {
    public static void main(String[] args) {
    DeptService deptService = new DeptServiceImpl();

     DeptService proxyDeptService = (DeptService) JdkProxyUtil.createProxy(deptService);
     proxyDeptService.update();
    

    }

}

package com.itheima.jdkProxy;

import com.itheima.service.DeptService;
import com.itheima.service.impl.DeptServiceImpl;

/**
 * @author healer
 * @Description JdkProxyDemo
 * @data 2024-06-08 14:48
 */
public class JdkProxyDemo {
    public static void main(String[] args) {
        DeptService deptService = new DeptServiceImpl();

        DeptService proxyDeptService = (DeptService) JdkProxyUtil.createProxy(deptService);
        proxyDeptService.update();

    }

}

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

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

相关文章

LNMP配置

文章目录 一、相关概念CGI的由来FastCGIPHP-FPM 二、编译安装编译安装nginxyum安装mysql编译安装php配置nginx支持php解析增加数据库安装论坛 一、相关概念 CGI的由来 最早的Web服务器只能简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器…

「动态规划」如何求粉刷房子的最少花费?

LCR 091. 粉刷房子https://leetcode.cn/problems/JEj789/description/ 假如有一排房子,共n个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。当然,因为市…

手把手教你通过 tensorflow-2.10 使用 BERT 实现 Semantic Similarity

前言 本文详细解释了在 tensorflow-gpu 基础上,实现用 BERT BILSTM 计算文本相似度的过程,主要的配置如下: tensorflow-gpu 2.10.0 python 3.10 transformers 4.26.1数据处理 这里导入了后续步骤需要用到的库,包括 NumPy、…

通用Mapper基础学习

一、引入 二、快速入门 1.创建测试数据 2.搭建MyBatis+Spring 开发环境 3.集成Mapper 4.第一个操作 Mapper接口源码介绍: 创建测试类: 三、常见操作

电阻常见失效模式

电阻常见失效模式: 电阻器由于结构较为简单,工艺成熟,通常失效率相对较低。器失效主要表现为以下几种: 阻值漂移:老化后通常发生;(通过老化试验进行筛选,规避该问题) …

SLT简介【简单介绍SLT】

SLT简介 在c的学习当中STL的学习是一个很重要的一环,但是STL又是一个庞大的章节,因此这里我们先简单介绍一下STL,有助于后面我们对STL的学习,这里就是做一个简单的介绍,并无干货。 1.什么是STL STL(standard templa…

如何用R语言ggplot2画折线图

文章目录 前言一、数据集二、ggplot2画图1、全部代码2、细节拆分1)导包2)创建图形对象3)主题设置4)轴设置5)图例设置6)颜色7)保存图片 前言 一、数据集 数据下载链接见文章顶部 数据&#xff1a…

CentOS Stream 9 磁盘扩容

当Linux系统磁盘被占满且资料无法删除,需要新添加磁盘,并将新磁盘扩容到相应的满载磁盘中 查看现有磁盘分区 [rootwcg-lvm-001 ~]# fdisk -l Disk /dev/sda:180 GiB,193273528320 字节,377487360 个扇区 磁盘型号&am…

数据的加密解密——https协议

回顾http协议: http协议发送的请求或者响应里的2正文数据是不做任何加密的,数据是裸的(原数据是什么样,发送过去的护具就是怎么样),但是在客户端到服务器之间是要通过中间运营商,路由器等中间人…

从初级到专业级,百度打破了AI的天花板

文|王一粟、艺思 大模型爆火一年,超级应用在哪里? 相比在ChatGPT问世时,人们对于“AI问答产品”寄予的超高期待,AI在办公场景中率先展现出来的能量,超出了所有人的预期。 6月7日,“AI产品榜”…

mmdetection使用未定义backbone训练

首先找到你需要用到的 backbone,一般有名的backbone 都会在github有相应的代码开源和预训练权重提供 本文以mobilenetv3 fastercnn 作为举例,在mmdetection中并未提供 mobilenetv3,提供的仅有 mobilenetv2; 在github上找到 mobil…

【设计模式】结构型-桥接模式

当抽象与实现,各自独立, 桥接模式,如彩虹桥,连接两岸。 文章目录 一、类爆炸与代码重复二、桥接模式三、桥接模式的核心组成四、运用桥接模式五、桥接模式的应用场景六、小结推荐阅读 一、类爆炸与代码重复 场景假设&#xff1a…

C++第二十六弹---stack和queue的基本操作详解与模拟实现

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1. stack的介绍和使用 1.1 stack的介绍 ​1.2 stack的使用 1.3 stack 模拟实现 2. queue的介绍和使用 2.1 queue的介绍 2.2 queue的使用 2…

5.31.15 使用图像到图像转换和 YOLO 技术对先前的乳房 X 光检查结果中的异常进行早期检测和分类

在本研究中,我们研究了基于 You-Only-Look-Once (YOLO) 架构的端到端融合模型的有效性,该模型可同时检测和分类数字乳房 X 光检查中的可疑乳腺病变。包括四类病例:肿块、钙化、结构扭曲和正常,这些病例来自包含 413 个病例的私人数…

一次曝 9 个大模型,「字节 AI」这一年都在做什么?

字节跳动的大模型家族,会长出下一个抖音吗? 整个 2023 年,字节并没有对外官宣其内部自研的大模型。外界一度认为,大模型这一技术变革,字节入场晚了。梁汝波在去年底的年会上也提到了这一点,他表示「字节对…

【全开源】露营地管理系统小程序源码(ThinkPHP+FastAdmin+UniApp)

专为露营业务设计开发小程序应用。平台拥有多角色管理,同时具有营位预定、门票购买等功能模块。 🔥露营地管理系统小程序:轻松掌控你的露营帝国🏕️ 📌一、引言:露营地管理的新时代 随着露营文化的兴起&a…

❤vue2项目webpack打包的优化策略

❤ vue2项目webpack打包的优化策略 (优化前) 现在我们的打包时间为: >打包体积大小为: 1、去除开发环境和生产环境提示以及日志 开发环境和生产环境的打印处理 生产环境去除console.log打印的两种方式 通过环境变量控制co…

知识图谱的应用---社交网络

文章目录 社交网络典型应用 社交网络 社交网络已成为发展最快的互联网应用,社交网络用户不仅仅是信息的接受者,也成为了信息的制造、加工和传播者,通过关注、被关注的方式形成了一张张庞杂繁复的用户关系网。随着社交网络中用户及信息急速增长…

数新网络签单国泰君安:利用数据服务平台提升金融业务用数能力

近日,数新网络与国泰君安证券股份有限公司(以下简称“国泰君安”)达成了数据服务平台升级项目的签约。这一项目的推进将更好地服务于国泰君安内部业务部门的数据需求,帮助数据平台更加有效地实现提升业务响应效率的目标&#xff0…

【Linux文件篇】系统文件、文件描述符与重定向的实用指南

W...Y的主页 😊 代码仓库分享💕 前言:相信大家对文件都不会太陌生、也不会太熟悉。在没有学习Linux操作系统时,我们在学习C或C时都学过如何去创建、打开、读写等待文件的操作,知道一些语言级别的一些接口与函数。但…