- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。
想改善这个问题吗?更新问题,以便堆栈溢出为 on-topic。
7年前关闭。
Improve this question
出于好奇,除了 cglib 之外,是否有任何(稳定的)开源项目用于运行时 Java 代码生成?我为什么要使用它们?
最佳答案
ASM java-asm
CGLIB 和几乎所有其他库都建立在 ASM 之上,ASM 本身在非常低的级别上起作用。这对大多数人来说是个障碍,因为您必须了解字节码和一点点 JVMS 才能正确使用它。但是掌握 ASM 无疑是非常有趣的。但是请注意,虽然有一个 great ASM 4 guide ,但在 API 的某些部分,javadoc 文档可能非常简洁,如果它存在的话,但它正在改进。它紧跟 JVM 版本以支持新功能。
但是,如果您需要完全控制,ASM 是您的首选武器。
该项目定期更新;在此编辑时,5.0.4 版已于 2015 年 5 月 15 日发布。
Byte Buddy byte-buddy
Byte Buddy 是一个相当新的库,但提供了 CGLIB 或 Javassist 提供的任何功能等等。 Byte Buddy 可以完全定制到字节码级别,并带有一个富有表现力的领域特定语言,允许非常可读的代码。
Javassist advices or custom instrumentation code is based on code in a plain
String
thus type check and debugging is impossible within this code, while ByteBuddy allows to write those with pure Java hence enforces type checks and allows debugging.
The user callbacks can be configured with annotations allowing to receive the wanted parameters in the callback.
The nifty agent builder allows ByteBuddy to be used as a pure agent or as attaching agent. It allows different kind
ProxyFactory
的
Enhancer
也有一些缺点,仅列出一些:
ClassloaderProvider
是一个静态字段,然后它适用于同一个类加载器中的所有实例 ProxyFactory
中不受支持。 apt
,从 Java 6 开始,注释处理被集成到 Java 编译器中。
ServiceLoader
方法(只需将此文件
META-INF/services/javax.annotation.processing.Processor
添加到 jar 中),编译器可以自动检测注释处理器。
关于java - cglib 有替代品吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2261947/
Spring不包含cglib依赖,cglib和spring cglib都有Enhancer类,一个是net.sf.cglib.proxy.Enhancer,另一个是org.springframewor
我正在尝试构建一个大型项目,但由于以下错误而失败: [INFO] -------------------------------------------------------------------
关闭。这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 想改善这个问题吗?更新问题,以便堆栈溢出为 on-topic。 7年前关闭。 Improve this
@Service public class TestService{ @DynamicReference private ITestProvider testProvider;
我有以下通用 cglib 方法拦截器实现: public class EntityInterceptor implements MethodInterceptor{ private Entit
假设我有一些 A 类,它具有 B 类的属性。 public class ClassA{ private ClassB classB; public ClassA(ClassB classB){ th
我正在使用 CGLib 来增强 A 类。 public class A { public void printName(){ System.out.println("guy");
我的 Controller 在其属性上使用了 @Value 注释,但是发生了一些奇怪的事情: 08:20:31.400 [main] ERROR Controller - postConstruct(
我想做的是序列化一个类实现一个命令模式,以便我稍后可以运行它。在最好的在所有世界中,我想序列化一个匿名类(我是意识到这个问题) 让事情变得有点复杂的是我在 Spring 的环境中并且我希望序列化的匿名
谁能给我一个 Java CGLib 的好例子 Mixin类用法?我一直在挖掘它们似乎都不够简单。 最佳答案 很简单: import static org.junit.Assert.*; import
在实际项目中,考虑到不同的数据使用者,我们经常要处理 VO、DTO、Entity、DO 等对象的转换,如果手动编写 setter/getter 方法一个个赋值,将非常繁琐且难维护。通常情况下,这类转换
代码如下: Patient patient = factory.createPatient(); Enhancer enhancer = new Enhancer(
我有两个类 @Component @Scope(proxyMode=ScopedProxyMode.TARGET_CLASS,value="session") public clas
代码是用 Scala 编写的,但希望 Java 程序员也能理解。 我有以下类(class): class SampleClass { def test(in: String) = "Hello w
我无法为 HttpURLConnection 类创建动态代理,因为它没有公共(public)构造函数来创建增强器。根据要求,我想创建一个动态代理以在运行时获取当前连接的详细信息。 我尝试使用this教
我想使用 cglib 作为我的 spring 代理机制。问题是,我有一些 bean 的依赖项由构造函数注入(inject),我无法更改。 CGLIB 似乎不太喜欢这样,不会让我实例化那个 bean。有
当尝试将 CGLIB 与回调过滤器(在数万个对象上)一起使用时,我注意到速度很糟糕,但我无法找到有关优化 CGLIB 的任何信息。 对于搜索/列表界面,系统从优化的查询中加载多个属性,并使用这些属性填
我正在为生产 spring batch 项目构建端到端测试框架。我们想使用内存中的嵌入式数据库(在我们的例子中是 hsqldb)进行这些测试,因为它运行得更快并且没有环境限制。由于这些数据库引擎之间的
借助 cglib,我可以使用以下代码创建延迟实例化的 BigInteger: Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(Bi
我有一个正在开发的 Java 库,它使用 cglib 创建库用户提供的抽象类的子类,并提供自动生成的用户留在其中的抽象方法的实现。 我的问题是,如果有问题的方法具有包本地(即默认)可访问性,我生成的方
我是一名优秀的程序员,十分优秀!