ASM实现AOP,如何传递方法参数 10C

public class Account {
public static void operation(String name) {
System.out.println("operation...");
}
}

public class SecurityChecker {
public static void checkSecurity(String name) {
System.out.println("SecurityChecker.checkSecurity ..."+name);
}
}

visitMethodInsn(INVOKESTATIC, "asm/SecurityChecker", "checkSecurity", "(Ljava/lang/String;)V",false);heckSecurity", "(Ljava/lang/String;)V",false);

通过asm对Account.operation方法增强,把SecurityChecker.checkSecurity(String name) 写入Account.operation方法前 ,那怎么样能把Account.operation方法的name参数传给SecurityChecker.checkSecurity方法

0

1个回答

通过线程上下文对象ThreadLocal应该可以

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
AOP 方法参数传递总结
目标bean,showValues(String value)方法执行作为连接点 Java代码 public class InitializingBeanNameClass public String showValues(String [color=red]value[/color]) { System.out.println("目标...
深入字节码 -- 使用 ASM 实现 AOP
转自:http://my.oschina.net/u/1166271/blog/162796?fromerr=Z7KbK3cz  AOP 的概念已经不是什么新鲜事物,所以我在这里就不在介绍 Aop 的概念。目前市面上要做到 Aop 是一件十分简单的事情。Spring、AspectJ、CGLib等等都可以帮助你达到目的,但是它们也只不过是一些泛生品。     上面提到了一些开源的 A
Asm实现静态AOP的两种方式-生成java-proxy类
AOP静态生成Java proxy  静态AOP基于java agent方式加载 java-javaagent:myagent.jar    动态AOP是通过java动态代理或者字节码增强技术在runtime期间进行增强。    静态AOP在这儿定义为在应用启动完成之前,就通过字节码生成技术对代码进行增加。    缺点:动态AOP对原生不能aop ,且遇到USER use
字节码实践 -- 使用 ASM 实现 AOP
       ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能...
Spring AOP切面传递参数
spring 配置文件相关配置 aop:config>           aop:aspect ref="magician">                     aop:pointcut expression="execution(* com.spring.aop.Thinker.thinkOfSomething(String)) and args
使用ASM4.0实现AOP的功能,监控每个方法的执行时间
接之前的博客http://zhwj184.iteye.com/admin/blogs/1630756 关于asm使用的示例,这次使用asm来动态统计每个方法的执行时间,实现AOP功能。 AOP的更通用的做法是对原始类动态生成子类,调用子类的方法覆盖父类,来实现AOP的功能。著名的 Hibernate 和 Spring 框架,就是使用这种技术实现了 AOP 的“无损注入”。   下
Spring AOP 实现机制
1 AOP各种的实现 AOP就是面向切面编程,我们可以从几个层面来实现AOP。 在编译器修改源代码,在运行期字节码加载前修改字节码或字节码加载后动态创建代理类的字节码,以下是各种实现机制的比较。    类别 机制 原理 优点 缺点 静态AOP 静态织入 在编译期,切面直接以字节码的形式编译到目
Spring aop: 如何在增强方法中获取并修改目标函数的参数
@RequestMapping(value="/dispatch",produces = "text/html; charset=UTF-8") @ResponseBody @ControllerPointcut(str = "OKOK") public String dispatch(@RequestParam("messageA")
在SpringAOP中如何获取方法的参数值(实体类)以及参数名
在前几篇的博客中,我利用AOP来做日志管理。感兴趣的同学可以去了解下(附上地址) https://blog.csdn.net/bicheng4769/article/details/79702778 实际产生的问题 在利用AOP管理日志的时候,遇到这样一个需求,需要将方法的参数、方法名记录下来。其实这样的需求很简单,我在前面那篇博客也讲过,就是利用java的反射机制获取。但是实际中会有这...
AOP+ASM+插件化总结--实现基于注解的埋点和统计-- 代码篇之:AMS
import org.objectweb.asm.AnnotationVisitor; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; import org.objectweb.asm.commons.AdviceAdap...
SpringAOP--使用通知获取目标方法的参数
获取目标方法的信息    访问目标方法最简单的做法是定义增强处理方法时,将第一个参数定义为JoinPoint类型,当该增强处理方法被调用时,该JoinPoint参数就代表了织入增强处理的连接点。JoinPoint里包含了如下几个常用的方法:Object[] getArgs:返回目标方法的参数Signature getSignature:返回目标方法的签名Object getTarget:返回被织入...
AOP+ASM+插件化总结--实现基于注解的埋点和统计-- 代码篇之:Transform
总结一下:基本都是制式的代码,包括遍历那一块等等,其他方法需要的类型和返回值也都在注释里了。 import com.android.build.api.transform.* import com.android.build.gradle.AppExtension import com.android.build.gradle.internal.pipeline.TransformManager ...
【无埋点技术】——使用ASM实现AOP编程【转】
https://www.ibm.com/developerworks/cn/java/j-lo-asm30/ 见链接
Spring AOP 前切入点及多参数问题
Spring AOP 前切入点及多参数问题 http://tonylian.iteye.com/blog/1730433 博客分类: 【AOP】【Spring】 aopspring  问题:看了很多关于Spring AOP的文章,在讲各种切入方式(before、around、after-returnning、thrown等)时,被切入的业务主体Bean的方法,基本都是无参数的
java1.8中ASM获取接口和抽象类以及类函数参数名称
前提条件 在java8中要获取类函数参数名称必须在编译时增加 -parameters 参数 具体内容详见 java1.8获取类和接口函数参数名称 尝试使用ASM获取接口和类函数名称 1 增加依赖 <dependency> <groupId>cglib</groupId> <artifactId>cglib&lt...
spring aop中实现变更方法参数以及annotation
实现功能: 利用spring aop annotation实现切片操作,并改变方法参数的值 判断方法或方法的参数上是否有特定的annotation,如果有,则按照其它逻辑进行处理 aop切片操作 @Component @Aspect public class AopAnnotation { private Logger logger = LoggerFact...
用注解和aop结合实现对方法参数的非空校验
@(Spring Boot)[annotation, aop] 用注解和aop结合实现对方法参数的非空校验 猜想 探索,没有实际应用 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import...
Spring Aop 获取参数名参数值
原创地址:https://blog.csdn.net/weixin_39931896/article/details/83451311  前言: 有时候我们在用Spring Aop面向切面编程,需要获取连接点(JoinPoint)方法参数名、参数值。 环境: Mac OSX Intellij IDEA Spring Boot 2x Jdk 1.8x  Code:  package ...
Spring AOP切面实现:参数传递
Spring Aop 参数注入 参数获取
Spring中的AOP(四)——在Advice方法中获取目标方法的参数
获取目标方法的信息     访问目标方法最简单的做法是定义增强处理方法时,将第一个参数定义为JoinPoint类型,当该增强处理方法被调用时,该JoinPoint参数就代表了织入增强处理的连接点。JoinPoint里包含了如下几个常用的方法: Object[] getArgs:返回目标方法的参数 Signature getSignature:返回目标方法的签名
AOP+ASM+插件化总结--实现基于注解的埋点和统计-- 引入篇
在写代码之前,外面首先要搞清楚各个类的引入(依赖),把这个搞清楚了,那么你在后续的开发中就不用操心当你新建一个类的时候的导包问题了,尤其是这个类很多包都有的时候,咬牙切齿! 说实话这个很折磨人,尤其是公司的网不好的时候,那时你会怀疑:究竟是我引入的姿势不对,还是破网有问题。 本文的引入都是我实际操作中遇到的,如果我说的不对,那么一定是studio的问题。 Transform的引入 首先看一下路径...
使用ASM实现AOP(2) -- 玩转 ASM-Bytecode
转自:http://my.oschina.net/u/1166271/blog/163550   本文是《深入字节码 -- 使用 ASM 实现 AOP》的后续博文。在上一篇文章中介绍了如何使用 ASM 动态安插代码到类中,从而简单实现 Aop。文章得到了广大朋友好评,我也希望可以不负众望继续写出可以得到大家认可的更多相关文章。废话不多进入正题。     古语有云“工欲善
AOP的底层实现-CGLIB动态代理和JDK动态代理
详细介绍了AOP的核心功能(拦截功能)在底层是如何实现的;介绍了两种实现AOP的动态代理:jdk动态代理和cglib动态代理,并详细描述了它们在代码层面的实现。
aop做切面时,获取目标方法中的参数
获取目标方法的信息    访问目标方法最简单的做法是定义增强处理方法时,将第一个参数定义为JoinPoint类型,当该增强处理方法被调用时,该JoinPoint参数就代表了织入增强处理的连接点。JoinPoint里包含了如下几个常用的方法:Object[] getArgs:返回目标方法的参数Signature getSignature:返回目标方法的签名Object getTarget:返回被织入...
使用ASM操作Java字节码,实现AOP原理
本文通过一个的例子来实现:使用ASM动态生成Java字节码文件(.class) 或者 加载字节码后动态修改字节码,添加我们需要执行的代码。年底了,也没心情抠字了,把写demo包含的几个类代码直接贴出来吧,代码拷贝下来后可以直接使用,不会有什么其他错误。 使用 asm-5.0.3.jar demo工程的package为com.shanhy.demo.asm.hello5个Java文件: AopC
梳理spring-aop的利器:asm3.0
AOP 的利器:ASM 3.0 介绍 随着 AOP(Aspect Oriented Programming)的发展,代码动态生成已然成为 Java 世界中不可或缺的一环。本文将介绍一种小巧轻便的 Java 字节码操控框架 ASM,它能方便地生成和改造 Java 代码。著名的框架,如 Hibernate 和 Spring 在底层都用到了 ASM。比起传统的 Java 字节码操控框架,BCEL 或者
通过AOP获取方法参数名的方法详解
直接看代码:    private void getKey(ProceedingJoinPoint joinPoint){        Object[] arguments = joinPoint.getArgs();//传入的参数                Signature signature = joinPoint.getSignature();//此处joinPoint的实现类是Me...
AOP的底层实现
AOP是目前Spring框架中的核心之一,在应用中具有非常重要的作用,也是Spring其他组件的基础。它是一种面向切面编程的思想。关于AOP的基础知识,相信多数童鞋都已经了如指掌,我们就略过这部分,来讲解下AOP的核心功能的底层实现机制:如何用动态代理来实现切面拦截。         AOP的拦截功能是由java中的动态代理来实现的。说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类
Java通过ASM运行时读取方法参数名称
据说Java8已经原生支持参数名读取了。具体不是很清楚。本文以java7为例进行说明.通过ASM字节码操作工具我们可以实现运行时参数名的读写。简单说说原理:java字节码为每个方法保存了一份方法本地变量列表。可以通过ASM获取这个列表。但是可能会获得列表顺序与期望的不一致。我们获取的本地变量了列表使用不同的编译器编译得到的顺序可能不同。一...
AOP编程之前置通知
在AOP编程中有三种类别对象,分别是通知(拦截器,,如统一的日志组件,流控组件),代理对象(ProxyFactoryBean,实现方法调用前的拦截),被代理对象(被拦截的对象)。          例子:假设有一个接口TestServiceInter有一个方法sayHello,它有两个实现类Test1Service和Test2Service,现在需要实现在调用sayHello之前完成拦截,实现相
AOP方式的函数参数修改
AOP方式的函数参数修改 实习时接了一个简单需求,要求在查询数据时,将输入的特定用户Id映射为其他Id,完成参数替换。由于涉及的方法实在是太多了,逐个进行代码改造工作量也比较大。最近实习也接触了spring生态,考虑使用AOP方式解决这个问题。 这里主要使用ProceedingJoinPoint类,该类能返回切点方法的许多信息,包括函数名,参数名列表以及参数列表等。根据函数参数列表是否包含us...
SpringAOP 处理通知中的参数(注解与xml配置)
上一篇文章讲的是springaop的最基本配置,没有任何参数,有参数的也就在环绕通知@Around 中使用了ProceedingJoinPoint 作为参数,要是切面所通知的方法确实有参数该怎么办?下面通过一个需求来实现aop处理参数的功能。 一个马戏团里有很多演员,编号分别为A、B、C…,老板要记录每个演员的演出次数作为年底发红包的依据。
AOP日志 记录方法参数名及对应值(包括对象和基本类型)
最近在优化日志打印内容,能够记录方法参数名及对应值,对现有贴子进行代码优化,贴上代码片段。
java反射:使用asm 获取方法的参数名
[Java]代码 /** * Classes.java 9:22:44 AM Apr 23, 2012 * * Copyright(c) 2000-2012 HC360.COM, All Rights Reserved. */ package cn.outofmemory.demo; import java.io.IOException; import java.lang.reflec
spring aop的注解配置中,前置,后置,环绕通知,以及异常通知怎么获得被代理方法的参数...
定义的接口 package com.aspectaop; public interface IUserDao {  /* (non-Javadoc)  * @see com.aspectaop.IUserDao#save()  */ /* (non-Javadoc)  * @see com.aspectaop.IUserDao#save(java.lang.String)  */ publi...
AOP-JDK 和CGLIB、Javassist、ASM之间的差别 (详细)
class文件简介及加载      Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中,解析.class 文件内的信息,生成对应的 Class对象:       class字节码文件是根据JVM虚拟机规范中规定的字节码组织规则生成的、...
spring aop五种通知及通知中传递参数!
定义切面(包含五种通知): import org.aspectj.lang.ProceedingJoinPoint; public class MyXmlServiceAop { public void beforeHandler(String name, int age) { System.out.println("前置通知:" + name + ":age=" +
ASM原理详解,以及使用附代码,AOP利器
少年,git代码,带你快速理解:https://github.com/singgel/eight-sorting-algorithms/tree/master/src/test/java/com/hks/eightsortingalgorithms/asm 一、什么是ASM   ASM是一个java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class ...
spring MVC AOP 拦截方法参数并根据业务逻辑处理参数
/** 例如登录把token转化为用户对象 */ 1,在spring-mvc.xml配置文件中的注入bean                                                                                   1 -->                              
Spring AOP——在通知(Advice)方法中获取目标方法的参数
https://my.oschina.net/itblog/blog/211693
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java中asm学习 如何实现云计算