0

我正在使用 aspectj 向现有类添加一些字段并对其进行注释。我正在使用加载时间编织。

示例:- 我有一个 Class 客户,我在其中添加 3 个字符串属性。但我的问题是我必须设置一些值并在我的业务调用之前得到它。

我正在尝试以下方法。在我的 aj 文件中,我添加了以下内容,我的问题是在周围切入点,我如何获取属性并设置属性。

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();
 }

如果有人有想法,请告诉我。

问候,金融时报

4

1 回答 1

0

第一个建议,我会避免将代码风格的aspectj与注释风格混合。即-而不是@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 回答