使用 ASM 或 Javassist 提高字段获取和设置性能
2022-09-03 15:09:46
我想避免在我正在开发的开源项目中出现反思。在这里,我有如下课程。
public class PurchaseOrder {
@Property
private Customer customer;
@Property
private String name;
}
我扫描注释以确定我可以设置的内容,并反思性地从“购买订单”中获取内容。有许多这样的类都使用 和 。@Property
java.lang.reflect.Field.get()
java.lang.reflect.Field.set()
理想情况下,我希望为每个属性生成一个调用程序,如下所示。
public interface PropertyAccessor<S, V> {
public void set(S source, V value);
public V get(S source);
}
现在,当我扫描类时,我可以创建一个像这样的静态内部类。PurchaseOrder
static class customer_Field implements PropertyAccessor<PurchaseOrder, Customer> {
public void set(PurchaseOrder order, Customer customer) {
order.customer = customer;
}
public Customer get(PurchaseOrder order) {
return order.customer;
}
}
有了这些,我完全避免了反思的成本。我现在可以设置和获取具有本机性能的实例。谁能告诉我我会怎么做。一个代码示例会很棒。我在网上搜索了一个很好的例子,但找不到这样的东西。ASM和Javasist的例子也非常差。
这里的关键是我有一个可以传递的界面。所以我可以有各种实现,也许一个默认使用Java Reflection,一个使用ASM,一个使用Javassist?
任何帮助将不胜感激。