我想对实现特定接口的类进行转换,但是由于类加载问题,我想按名称而不是通过提供类来进行转换。有办法吗?
我的意思是,而不是:
new AgentBuilder.Default()
.disableClassFormatChanges()
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
.with(AgentBuilder.InitializationStrategy.NoOp.INSTANCE)
.with(AgentBuilder.TypeStrategy.Default.REDEFINE)
.type(isSubTypeOf(myClass.class).and(not(isAbstract())).and(not(isInterface())))
.transform(new AgentBuilder.Transformer.ForAdvice()
.advice((ElementMatchers.named("method")),
"adviceClass"))
.installOn(inst);
我想做这样的事情(请注意下面的isSubTypeOf()):
new AgentBuilder.Default()
.disableClassFormatChanges()
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
.with(AgentBuilder.InitializationStrategy.NoOp.INSTANCE)
.with(AgentBuilder.TypeStrategy.Default.REDEFINE)
.type(isSubTypeOf(**TypeDescription.ForLoadedType.ofName(className)**).and(not(isAbstract())).and(not(isInterface())))
.transform(new AgentBuilder.Transformer.ForAdvice()
.advice((ElementMatchers.named("method")),
"adviceClass"))
.installOn(inst);
有办法吗?
答案 0 :(得分:0)
有一个匹配器:hasSuperType(named(className))
。另外,您可以实现自己的匹配器,仅浏览类型层次结构。例如,如果您知道所讨论的类型不是接口,这可能会稍微提高效率。