我想忽略对源类和目标对象抽象的方法的检测,但是如果它只是源的抽象方法,那么我想在目标对象上调用等价的方法。目前我正在使用这个
adapter = new ByteBuddy().subclass(source.class)
.method(ElementMatchers.isAbstract())
.intercept(MethodCall.invokeSelf().on(target).withAllArguments()).make()
.load(clazz.getClassLoader(),ClassLoadingStrategy.Default.INJECTION).getLoaded().newInstance()
但是得到这些类型的异常 在源类和目标对象中都没有实现的抽象方法失败并出现以下错误。
无法调用公共抽象java.lang.Objectjava.sql.Wraper.unwrap(java.lang.Class)throws java.sql。公共静态易失性java.lang.Class com.demo.Source$ByteBuddy$f7N2VK0l.invocationTarget$fl948k0上的SQLException
如果该方法在这两种情况下都是抽象的,我能否实现以下任何一种情况?
如果你知道确切的目标类型,你可以在匹配器中确定它?在这种情况下,实现自己的匹配器。
您还可以使用 MethodAssessment 和 Pipe 注释。在这里,您可以捕获异常并返回回退。
让我有一个这样的界面: 还有这样一个实现类: 现在我想使用bytebuddy创建一个拦截器/代理,它捕捉对setter的调用,存储更改后的值,并调用real方法。 最后,我想向拦截器/代理“询问”被调用的setter和更改的值。 我尝试了很多考虑也教程,但到目前为止,我发现没有工作的解决方案。也许有人可以帮助我。 这是拦截器: 以下是我当前的“测试”代码: 编辑:
让我们有一个简单的界面: 现在我这样创建代理: 当我执行测试时,我看到以下输出: 似乎我永远无法访问被调用方法的方法签名,如果它起源于接口,并且不是由超类实现的?! 当我调用我会看到,它也接受所有输入参数。 我错过了什么?我看了留档,但我仍然很困惑。 一般来说,我想创建,它捕获代理类中的所有方法,并处理以下情况: 执行一些操作,然后将调用传播到原始方法 做某事并返回它自己的结果,而不调用原始meh
我一直在使用字节好友来监控应用程序的行为,我想在执行特定方法之前检查其中一个应用程序类的数组字段是否已更新。我已经阅读了字节好友留档和堆栈溢出问题,并找到了一些有用的留档,了解如何使用拦截字段访问。 然而,因为我感兴趣的领域是一个数组,中的和事件似乎无关紧要。 是否可以使用ByteBuddy跟踪数组字段的更新?
我正在尝试使用bytebuddy拦截和访问。我已经阅读了网站上相当全面的文档,但据我所知,它涵盖了向字段添加getter和setter,而不是拦截字段访问。 以下是我想做的: 在这两种情况下,我都在尝试在字段访问之前/之后调用一些方法(或插入一些字节码)。我正在考虑使用来做到这一点,但我无法找到一种方法将其用于方法以外的东西。 编辑: 我正在使用Java代理来做这件事。我想添加一个来复制对象引用,
问题内容: 主题行基本上说明了一切。我有一个静态方法要拦截,以便可以将周围的建议应用于该方法。我可以使它与任何非静态方法一起使用,但是我不确定如何允许静态方法被拦截。 问题答案: 使用Spring AOP不能做到这一点,因为它是基于代理的。您必须使用AspectJ。看一个简单的例子:http : //blog.jayway.com/2007/02/16/static-mock-using- asp
如果我有课,说: ...我想使用Java代理拦截“某种方法”,所以我做了一些事情: 在截取方法中,如何使用ByteBuddy访问类Foo的“name”字段? ByteBuddy是否可以公开这个私有变量供我检查(或者修改,但对于我的用例,只读是可以的)?