使用基于OW2 ASM事件的方法合并类

时间:2017-11-26 17:16:25

标签: java java-bytecode-asm bytecode-manipulation

我正在尝试使用ASM Core框架(而不是Tree one)合并两个类的最佳策略。

由于ClassReader和ClassVisitor严格绑定到一个类,你会怎么做?

我已在官方文档中搜索过,但所有内容都是使用ClassNode实现的,该类是来自Tree模块。

假设我们有一个基础通用接口:

public interface CrudDao<T, ID>
{
   T select(final ID id);

   boolean update(final T object);

   boolean insert(final T object);

   boolean delete(final ID id);
}

具体的通用实现:

public class MyCrudDao<T, ID> implements CrudDao<T, ID>
{
   @Override
   public T select(final ID id) {
      ...
   }

   @Override
   public boolean update(final T object) {
      ...
   }

   @Override
   public boolean insert(final T object) {
      ...
   }

   @Override
   public boolean delete(final ID id) {
      ...
   }
}

现在我们定义一个扩展CrudDao的抽象类,提供额外的功能或覆盖接口方法,同时对具体实现无动于衷:

public abstract class ConfigurationDao implements CrudDao<Configuration, String>
{
   public List<Configuration> selectAll() {
      ...
   }

   @Override
   public int count() {
      ...
   }
}

我想用ASM获得的是一个新的具体类,它扩展了ConfigurationDao,它将CrudDao接口的方法代理到MyCrudDao实现(如果还没有被覆盖) ,请参阅上面的count(),并简单地复制抽象类方法。

我实际上在拉斐尔回答之后实现了这一点,但是在简单的基准测试之后,与ByteBuddy网站上报道的相比,这似乎很慢。

accept()电话到toByteArray()电话(已排除)

,大约需要25-30毫秒

0 个答案:

没有答案