问题标签 [byte-buddy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
488 浏览

java - 如何将 CGLib 代理转换为 Byte-Buddy

我正在努力尝试将与 CGLib 一起使用的代理转换为 BB。我已经轻松实现了声明的方法拦截,但无法根据需要扩展对象。在 CGLib 中,我使用接口和拦截器。这是我的 CGLib 代理代码:

这工作很好。使用接口方法对子类对象的每次调用都委托给扩展该对象的代理类。在该对象中,我存储了与实体、图形数据库中的顶点和状态相关的其他对象的引用。我必须做什么才能在 BB 中实现这一点?

====================================

好吧,今天我有这个灵魂的工作,但没有。ObjectProxyFactory 分为两类:

现在我有了制作胶水的 ObjectProxyFactory:

使用此代码,它会引发此异常:

java.lang.IllegalArgumentException:无法在 net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection.(ClassInjector.java:161) 处将类注入引导类加载器...

0 投票
1 回答
88 浏览

byte-buddy - Bytebuddy 不适用于 zing

看起来 bytebuddy 不适用于 zing jvm。Javaagent 已启动,但拦截器未激活。有人设法让它与zing一起工作吗?

0 投票
1 回答
325 浏览

java - ByteBuddy 拦截对方法字节码内特定类实例的调用

我有一个带有方法 m() 的 A 类和一个带有方法 n() 的 B 类。在 AI 中有一个类型为 B 的字段 b。在 m() 中,有时会调用 bn()。我需要用 ByteBuddy 更改 A 的代码,以便在 bn() 调用之前和之后执行一些操作。我需要一些建议/提示/提示来解决问题。

提前致谢,

拉杜

0 投票
1 回答
129 浏览

java - 在 Glassfish 环境中实现 Byte-Buddy 代理时出错

我无法在 Glassfish 服务器中实现 BB 代理。当我尝试使用生成的类时,它会抛出:

下面是生成代理对象的方法类:

是完整的堆栈跟踪。

注意:代码工作正常,并通过了独立 jvm 中的所有测试。


这是 Glassfish 的类加载器!我无法让它从 WEB-INF/lib 加载类。

0 投票
1 回答
537 浏览

java - ByteBuddy:如何使用 java.* 中的类进行测试

我正在尝试为拦截来自 java.io 的类的调用(例如 FileInputStream)的代理编写 UnitTest。

我已经按照此处给出的提示查看了 ByteBuddys自己的UnitTests。

对非 java.* 类的类似测试工作正常,但是在这里我收到:

我尝试将 SecurityManager 设置为 null,但没有成功:

如果我没记错的话,应该可以拦截这样的类。这可能是由于使用了自定义 ClassLoader。但是我不知道需要改变什么......

0 投票
1 回答
836 浏览

spring - ByteBuddy @Entity 注释对 Spring Boot ClassPathBeanDefinitionScanner basePackages 扫描不可见

我正在尝试转换类,以便 Spring 可以看到转换后的注释。这将允许我动态注入 @Entity 注释,以便 Spring Boot 将其注册为托管类型以供数据使用。

注释转换有效,但 Spring Boot 似乎在文件 jar 级别执行包扫描,缺少转换后的版本。这意味着 Spring 看不到注释,因为它正在分析 JAR 本身内的类文件的输入流。

初始spring候选组件扫描如下:

getResources 调用最终以 PathMatchingResourcePatternResolver 结束 - doFindAllClassPathResources

在这种情况下,Springs 类加载器是否超出了 ByteBuddy 的范围?

加载资源后,Spring 加载类元数据(缺少注释)

上面的 getMetadataReader 方法调用最终结束于

它使用 ASM ClassReader 来访问类和注释元数据。这显然没有找到Bytebuddy放置的@Entity注解。

我不确定是否应该以某种方式将 Classloader 链接到 Bytebuddy 或覆盖 Springs SimpleMetadataReader 以让我自己的实现由 ByteBuddy 支持。

有什么建议么?我正在使用 AgentBuilder 来转换注释并在 spring boot 启动之前运行它。

为了完整性,我的 ByteBuddy Impl:

我回顾了Unable to Instrument apache httpclient using javaagent for spring boot uber jar application

如果您需要更多实施细节,请告诉我。我想干净地将 bytebuddy 与 spring 集成,这样我就可以使用 spring 组件注释来检测类。

0 投票
1 回答
554 浏览

java - ByteBuddy 子类构造函数

我正在尝试在 bytebuddy 中创建一个抽象类的子类,并想用我自己的函数覆盖构造函数。我不能让它与defineConstructor一起工作。

超类:

子类:

我的字节好友:

错误:

0 投票
1 回答
764 浏览

java - Byte Buddy改造后,如何在不加载或保存类的情况下获取类信息?

对于现有的私有方法,例如类的package private默认构造函数ContentItem,我使用下面的代码来设置要保护的方法。

通过测试下面的代码和Byte Buddy的测试用例AbstractDynamicTypeBuilderForInliningTest.java::testMethodTransformationExistingMethod(),我发现如果我dynamicType将它加载或保存到文件中,加载的类和保存的类的默认构造函数确实变成了protected,但构造函数dynamicType.getTypeDescription().getDeclaredMethods()仍然保持原来的修饰符,ig 0(包私有) .

所以问题是,如何在不加载或保存的情况下获取转换后的类信息?我需要使用转换后的类信息将默认构造函数添加到类的子类中ContentItem(子类的默认构造函数需要调用ContentItem的默认构造函数)。

0 投票
1 回答
1792 浏览

mockito - OSGI 中带有 Mockito 2 的 ClassNotFoundException

当我尝试使用 Mockito 2(版本 2.0.54 beta)在 eclipse 中运行 junit 插件测试时,调用 org.mockito.Mockito.mock(Class<T>, MockSettings) 失败并出现上面的堆栈跟踪。

我设法通过这样做来解决这个问题

这似乎不对,并且需要大量工作才能从 mockito 1 移动到 mockito 2,还有其他方法可以在 osgi 环境中使用 mockito 吗?

0 投票
3 回答
1637 浏览

java - 如何用 Bytebuddy 高效地包装 POJO?

我想包装简单的 POJO 类。问题是我事先对那个类一无所知,只知道它是带有 setter 和 getter 的 POJO。我想用我的 Proxyclass 替换这个类,以便每次客户端调用 getter 或 setter 时,我都能够拦截该调用。所以当调用被拦截时,我想做一些pre-get(或set)操作,然后调用getter(或setter),然后再做一些post-get(或set)操作。我正在这样创建我的代理

我的 GetterInterceptor 看起来像这样

和二传手看起来一样。

但是当我从我的 Proxyclass 实例中设置和获取某些东西时,它比初始 Pojo 类实例要慢得多(慢 1.5-2 倍)。难道我做错了什么?我相信,一定有办法让它更快。

任何帮助表示赞赏!

我通过以下方式测量性能

我的结果是