簡體   English   中英

使用Spring / AspectJ進行架構實施

[英]Architectural Enforcement Using Spring/AspectJ

我有一個Spring項目使用注釋來應用(除其他外)緩存。

我的理解是這些注釋只有在@Autowired並通過SpringAOP調用時才有效。

這意味着如果方法在同一個類中調用另一個,則忽略第二個方法上的任何注釋,例如

@Cacheable(...)
public Animal getAnimal(int id) {
    return get(m_url, id);
}

public Cage getCagedAnimal(int id) {
    Animal animal = getAnimal(id);  // This call will not apply @Cacheable
    Cage cagedAnimal = new Cage(animal);
    return cagedAnimal;
}

我正在尋找的是一種強制執行此方法的方法,即公共方法不應該能夠調用同一類的其他公共方法。

我嘗試應用與此處使用的方法類似的內容http://www.jayway.com/2010/03/28/architectural-enforcement-with-aid-of-aspectj但是在同一類上應用限制時不盡如人意。

這是完全可行的,AspectJ非常強大。 但是你似乎使用Spring AOP而不是AspectJ,而且與AspectJ相比,Spring AOP非常有限。 Spring AOP的工作原理是圍繞實際的bean實現創建代理,以實現它提供的AOP功能。 當代理獲得調用時,將應用建議並將流控制傳遞給普通bean。 如果普通bean(代理的目標)本身調用另一個方法,則不會在代理上調用它,因此將繞過AOP部分。 AspectJ沒有這個限制,因為它正在修改你的類,而不僅僅是圍繞它們創建代理。 我強烈建議使用AspectJ而不是Spring AOP。 Spring也適用於AspectJ。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM