java的aop实现方式

java的aop可以通过三种方式来实现

1.使用ajc编译的插件来完成增强

这种方法会直接修改编译完成的class文件,不需要依赖springboot

2.动态代理proxy

2.1cglib

可以代理接口,方法等,这种方式代理类是目标类的子类,要求目标类不能是final修饰,若方法为final则不能增强,MethodProxy proxy可以不使用反射,优化效率

package com.ai.hdl.system.study.spring;import lombok.extern.slf4j.Slf4j;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;@Slf4j
public class MyProxy1 {public static void main(String[] args) {IMyProxyImpl1 iMyProxyImpl1 = new IMyProxyImpl1();IMyProxyImpl1 before = (IMyProxyImpl1) Enhancer.create(IMyProxyImpl1.class , new MethodInterceptor() {@Overridepublic Object intercept(Object obj , Method method , Object[] args , MethodProxy proxy) throws Throwable {System.out.println("before");Object invoke = method.invoke(iMyProxyImpl1 , args);return invoke;}});before.myProxy();}
}
@Slf4j
class IMyProxyImpl1 {public void myProxy() {log.error("proxy1");}
}

运行结果

2.2jdk

这种方式只能通过接口代理其他方法,这种方式代理类也会继承接口

package com.ai.hdl.system.study.spring;import lombok.extern.slf4j.Slf4j;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;@Slf4j
public class MyProxy {public static void main(String[] args) {IMyProxyImpl myProxy = new IMyProxyImpl();ClassLoader classLoader = IMyProxy.class.getClassLoader();IMyProxy before = (IMyProxy) Proxy.newProxyInstance(classLoader , new Class[]{IMyProxy.class} , new InvocationHandler() {@Overridepublic Object invoke(Object proxy , Method method , Object[] args) throws Throwable {log.error("before");Object invoke = method.invoke(myProxy,args);return invoke;
//                return null;}});before.myProxy();}
}
interface IMyProxy {void myProxy();}
@Slf4j
class IMyProxyImpl implements IMyProxy {@Overridepublic void myProxy() {log.error("proxy");}
}

运行结果

3.agent

这种方式会在类加载时增强,也不依赖于springboot,需要加入相关的jvm参数,会在类中加入增强的方法,通过this的方式调用

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

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

相关文章

使用 EFCore 和 PostgreSQL 实现向量存储及检索

随着 ChatGPT 的兴起及其背后的 AIGC 产业不断升温,向量数据库已成为备受业界瞩目的领域。FAISS、Milvus、Pinecone、Chroma、Qdrant 等产品层出不穷。市场调研公司 MarketsandMarkets 的数据显示,全球向量数据库市场规模预计将从 2020 年的 3.2 亿美元增长至 2025 年的 10.5…

Ps 滤镜:风格化

风格化 Stylize滤镜通过置换像素和通过查找并增加图像的对比度,基于原图像生成绘画或印象派的效果。 查找边缘 Find Edges “查找边缘”滤镜通过分析图像的色彩和亮度变化来识别边缘。 这种处理方式使得图像的主要轮廓以一种艺术化的线条形式被强调出来,…

大语言模型的指令调优:综述

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 论文标题:Instruction Tuning for Large Language Models: A Survey 论文地址:https://arxiv.org/abs/2308.10792 指令调优是提升大语言模型(LLMs)性能…

python爬虫3-xpath批量定位元素的方法

以爬取豆瓣影评的电影名称为例。 第一步 鼠标右键单击,选择【检查】 第二步 切换到【元素】标签,展示源代码 选择下图的小箭头,再选择想要定位的文本,源代码会自动定位到该文本。 第三步 鼠标放在该文本的源代码上,…

Pytorch官方FlashAttention速度测试

在Pytorch的2.2版本更新文档中,官方重点强调了通过实现FlashAtteneion-v2实现了对scaled_dot_product_attention约2X左右的加速。 今天抽空亲自试了下,看看加速效果是否如官方所说。测试前需要将Pytorch的版本更新到2.2及以上,下面是测试代码…

Prometheus-Grafana基础篇安装绘图

首先Prometheus安装 1、下载 https://prometheus.io/download/ 官网路径可以去这儿下载 2、如图: 3.解压: tar -xf prometheus-2.6.1.linux-amd64 cd prometheus-2.6.1.linux-amd64 4.配置文件说明: vim prometheus.yml 5.启动Promethe…

kail渗透工具之nmap的使用方法

准备工作:开启两台虚拟机和一台Windows主机 kail Linux攻击机:192.168.80.131 red hat靶机:192.168.80.129 Windows主机:192.168.252.42 1、nmap扫描工具的简介 nmap是用来探测计算机网络上的主机和服务的一种安全扫描器。为了绘…

2024年视频号小店无货源,你一定要尝试一下,出九单收入1W+

大家好,我是电商花花。 如果说去年视频号的流量还差点意思,那么今年的视频号销量一定是非常高的,随着视频号的扩展,也让更多的创业者和博主入驻视频号,让更多人了解到了视频号小店,是这样赚钱的。 首先&am…

深水采样器小口径特氟龙材质FEP贝勒管

FEP贝勒管,深水采样器(bailers tube),是一种经济型便携式水质采样器,操作简单,使用方便,性价比高,能大限度的保证样品的真实性。采样管直径很小,能够采取小口径的深水井水样。是一款简单实用&am…

磁盘管理显示u盘无媒体怎么恢复数据

随着科技的发展,U盘已成为我们日常生活和工作中不可或缺的数据存储工具。然而,当我们在使用U盘时,有时会遇到“磁盘管理显示U盘无媒体”的困扰。面对这一问题,许多用户可能会感到惊慌失措,担心数据丢失。本文将为您详细…

c语言例题,计算1/1-1/2+1/3-1/4+1/5……+1/99-1/100的值,打印结果

例题:计算分式1/1-1/21/3-1/41/5……1/99-1/100的值,打印结果 根据题目,我们知道需要计算的是一个固定值, 先定义三个变量来当作分式里的三个值,变量i当作分式里的分母部分,通过for循环来实现分母每次循环…

存储器层次结构

内存 对于内存已经不像曾经那般陌生了,在汇编中,我们大量接触了内存,但是我们还没有对它有个确切、深入的了解。 内存其实叫做随机访问存储器(RAM,Random Access Memory),最基本的存储单位称为…

怎么获取OpenAI的api-key【人工智能】

怎么获取OpenAI的api-key【人工智能】 前言版权推荐怎么获取OpenAI的api-key1.访问控制台2.点击API keys3.点击Start verification4.点击新建密钥 最后 前言 2024-4-11 11:32:06 以下内容源自《【人工智能】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首…

自动挡变速箱 相关的东西研究

1. 原来大众POLO变速箱故障时,详细的维修流程是这样的!_易车 原来大众POLO变速箱故障时,详细的维修流程是这样的!_易车 大众POLO七速干式双离合变速箱OAM 本文主要讲解的是大众POLO双离合变速箱的维修案例,首先说一…

【C++】模版

目录 一、泛型编程二、函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 三、类模板3.1 类模板的定义格式3.2 类模板的实例化 四、非类型模板参数五、模板的特化5.1 概念5.2 函数模板特化5.3 类模板特化5.3.1 全特化5.3…

JS加密:对比JScrambler和JShaman加密效果

本文,以一个实例,比对JS加密两大神器:JScrambler、JShaman的加密结果,看看谁的加密效果更好。 注:本文不是技术文章,仅仅从加密结果的“型”上简单观查,不做技术分析,仅看哪个加密代…

【计算机考研】数据结构都不会,没有思路,怎么办?

基础阶段,并不需要过于专门地练习算法。重点应该放在对各种数据结构原理的深入理解上,也可以说先学会做选择题、应用题。 因为在考试中,大部分的算法题目,尤其是大题,往往可以通过简单的暴力解决方案得到较高的分数。…

计算机服务器中了devicdata勒索病毒怎么办,devicdata勒索病毒解密数据恢复

在企业的生产运营过程中,网络为企业的发展带来了极大便利,大大提升了企业生产效率,但网络在为人们提供便利的同时,也为企业的数据安全带来隐患,近期,云天数据恢复中心接到多家企业的求助,企业的…

多语言婚恋交友app搭建秘籍,助你占据市场先机

在当今社交网络蓬勃发展的时代,相亲、交友已经不再局限于传统的线下相识,而是通过移动应用来实现。尤其是对于涉及国际范围的婚恋交友APP,多语言功能更是不可或缺的重要组成部分。为什么选择多语言婚恋交友APP搭建呢?通过多语言支…

客户关系CRM管理系统源码 企业crm管理系统

客户关系CRM管理系统源码 企业crm管理系统 系统功能介绍 1、 公海管理:公海类型、客户公海。 2、 线索管理:我的线索、线索列表、线索状态、线索来源。 3、 客户管理:我的客户、客户列表、成交客户、行业类别、预查、地区列表、客户状态、…