使用aspectJ获取和设置类的属性值

时间:2013-02-21 07:29:30

标签: aspectj

我正在使用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();
 }

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

的问候, FT

1 个答案:

答案 0 :(得分: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);
}

现在,回答你的问题:你还需要使用intertype声明向你的类添加新字段,所以做这样的事情:

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

请注意,此处的private关键字表示方面的私有,而不是您声明的类。