バイトバディはコード生成ツールであり、もちろんそのようなソリューションを実装することは可能です。
public class MyInterceptor {
public static void intercept(Object value) {
// business logic comes here
}
}
この方法では、あなたがセッターいくつかのコードを毎回追加することができます:あなたはこのようなインターセプタを記述し
new ByteBuddy()
.subclass(UserPojo.class)
.method(ElementMatchers.isSetter())
.intercept(MethodDelegation.to(MyInterceptor.class)
.andThen(SuperMethodCall.INSTANCE)
.make();
:セッターをインターセプトするクラスを作成するために、次のようなコードを記述します元のコードの前にトリガーされます。引数のボクシングを避けるために、すべてのプリミティブ型でインターセプトメソッドをオーバーロードすることもできます。 Byte Buddyはあなたのために何をすべきかを考え出します。
しかし、私はあなたが意味するものをperformantと混同しています。上記のコードは、私にはのようなクラスを作成するのと同じ判明:
class UserClass {
String value;
void setValue(String value) {
this.value = value;
}
}
class InstrumentedUserClass extends UserClass {
@Override
void setValue(String value) {
MyInterceptor.intercept(value);
super.setValue(value);
}
}
パフォーマンスは、主にあなたがintercept
メソッド内で何をすべきかのパフォーマンスの影響を受けています。
最後に、私はcglibがあなたにとってうまくいかないが、cglibの上にビルドされたSpringを使用することは理解できません。私はあなたが傍受しなければならないあなたの傍受論理にいくつかの問題があると考えます。
いくつかの測定でパフォーマンスの問題を詳しく説明できますか?メソッドの呼び出し回数、変更の追跡なしのメソッドの実行時間、変更の追跡による実行時間、コードの変更追跡の作業の概要 –
@NándorElődFeketeに同意します。 AspectJはSpring AOPよりも遅くなければならないと考えるのは難しいです。そうであれば、AspectJは非常に効率的であるため、何か間違っていなければなりません。あなたの面を見れば、私たちが助けてくれるかもしれません。しかし、あなたがByteBuddyに満足すれば、このコメントは時代遅れです。最近私は忙しかったので、ここではあまり読んでいなかったので、ここでコメントするのはちょっと遅いです。 – kriegaex