0

私は、aspectj を使用して、いくつかのフィールドを既存のクラスに追加し、それに注釈を付けています。load time weaving を使用しています。

例:- 3 つの文字列属性を追加するクラスの顧客がいます。しかし、私の問題は、いくつかの値を設定し、ビジネスコールの前にも取得する必要があることです。

私は以下のアプローチを試みています。私のajファイルに以下を追加しました。私の問題はAround pointcutにあります。属性を取得して属性を設定するにはどうすればよいですか。

public String net.customers.PersonCustomer.getOfflineRiskCategory() {
        return OfflineRiskCategory;
}

public void net.customers.PersonCustomer.setOfflineRiskCategory(String offlineRiskCategory) {
        OfflineRiskCategory = offlineRiskCategory;
    }

    public String net.customers.PersonCustomer.getOnlineRiskCategory() {
        return OnlineRiskCategory;
    }

    public void net.customers.PersonCustomer.setOnlineRiskCategory(String onlineRiskCategory) {
        OnlineRiskCategory = onlineRiskCategory;
    }

    public String net.customers.PersonCustomer.getPersonCommercialStatus() {
        return PersonCommercialStatus;
    }

    public void net.customers.PersonCustomer.setPersonCommercialStatus(String personCommercialStatus) {
        PersonCommercialStatus = personCommercialStatus;
    }

    @Around("execution(* net.xxx.xxx.xxx.DataMigration.populateMap(..))")
 public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {
  Object arguments[] = joinPoint.getArgs();

  if (arguments != null) {
      HashMap<String, String> hMap = (HashMap) arguments[0]; 
      PersonCustomer cus = (PersonCustomer) arguments[1];

  return joinPoint.proceed();
 }

誰かアイデアがあれば教えてください。

よろしく、 FT

4

1 に答える 1

0

最初の提案は、コード スタイルのアスペクトと注釈スタイルを混在させないことです。つまり、 の代わりに@Aroundを使用しますaround

次に、joinPoint から引数を取得する代わりに、ポイントカットでそれらをバインドする必要があります。

Object around(Map map, PersonCustomer cust) : 
    execution(* net.xxx.xxx.xxx.DataMigration.populateMap(Map, PersonCustomer) && args(map, cust) {
  ...
  return proceed(map, cust);
}

さて、あなたの質問に答えるために: クラスに新しいフィールドを追加するために型間宣言を使用する必要があるので、次のようにします:

private String net.customers.PersonCustomer.OfflineRiskCategory;
private String net.customers.PersonCustomer.OnlineRiskCategory;
private String net.customers.PersonCustomer.PersonCommercialStatus;

ここでのprivateキーワードは、それを宣言するクラスに対してではなく、アスペクトに対してプライベートであることを意味することに注意してください。

于 2013-02-22T23:25:18.177 に答える