2013-02-21 98 views
0

我正在使用aspectj向現有類添加一些字段並對其進行註釋。 我正在使用加載時間編織。使用aspect獲取和設置類的屬性值j

示例: - 我有一個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

回答

0

第一個建議,我會避免混合代碼風格的AspectJ與註解風格。即,而不是@Around,請使用around。的

二,而不是從連接點得到的參數,你應該約束這些人的切入點:

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關鍵字在這裏是指私有的方面,而不是你聲明它的類。