異なる注釈付きメソッドを置き換えるのにbytebuddyを使用しています。これらのように:あなたが見ることができるように、我々はからいくつかの情報が必要Bytebuddy:インターセプトされた固定値でメソッドを取得
public String interceptString(@Origin Method method) {
// fetch current value from DB
return db.fetchString(method);
}
:
new ByteBuddy().subclass(Example.class)
.method(ElementMatchers.isAnnotatedWith(Setting.class)
.intercept(MethodDelegation.to(interceptors)).make().load(...)
とinterceptors
は以下ました:現時点では
public class Example{
@Setting
public String foo(){
return "hello";
}
@Setting
public String bar(){
return "world";
}
}
、我々はMethodDelegationを使用しますオリジナルのメソッドを使用して、データベースから正しいデータを取得します。これは機能していますが、
データベースからの値は1回だけ必要です(アプリケーションの起動時)。その後、値は実際には動的ではありません。パフォーマンス上の理由から、MethodDelegationをFixedValueに変更して、各メソッド/設定ごとにDBへの呼び出しを1つだけ行い、その後のすべての呼び出しで「キャッシュされた」固定値を使用します。我々はDBからデータを解決してフェッチする方法が必要になりますので
通常、我々は
//...
.method(ElementMatchers.isAnnotatedWith(Setting.class)
.intercept(FixedValue.value(getValue()))
と
private Object getValue(){
Method method = ???
return db.fetchString(method);
}
のようなものを使用することになり、これが不足しています。だから最終的には質問があります:
ここでは、インターセプトされたメソッドに固定値を渡す可能性がありますか?