2017-02-26 32 views
1

這裏定義的Spring配置內部的方面是如何定義使用批註方面的例子:如何使用Java配置僅

@Aspect 
public class BlaBla() { 
    @Pointcut(...) 
    ... 

    @Before(...) 
    ... 

    @After(...) 
    ... 
} 

這是我通過研究發現的唯一途徑。但是我希望BlaBla類不會被註解和切入點方法污染。我希望它仍然是一個POJO。如果我是用XML Spring配置,我可以很容易做到這一點:

<bean id="blaBla" class="BlaBla">...</bean> 

<aop:config> 
    <aop:aspect ref="blaBla"> 
     <aop:pointcut .../> 
     <aop:before .../> 
     <aop:after .../> 
    </aop:aspect> 
</aop:config> 

不過,我沒有使用XML配置,而是一個Java配置來代替。基本上問題是,我怎麼能說春天那個類BlaBla是一個沒有改變BlaBla類本身的方面,而是在一個java類中定義它,註解是@Configuration spring註釋。

+0

AOP IST的主要原則modularise一個橫切關注點 - 所謂的一個方面 - 在一個地方像你這樣modularise一個核心關注到一個類。爲什麼你想撕開它呢?我從未理解這種方法。你的第一個代碼示例說明了這一切:「這是BlaBla的一個方面,包含以下切入點和建議等。」你想要的只是沒有意義的IMO。在一個方面維護方面相關的東西,而不是與它分開。爲什麼在試圖理解方面邏輯時在兩個地方搜索? – kriegaex

+0

因爲BlaBla也是一個bean。理論上我可能希望將它用作一組接口的方面,同時將它注入其他類並以不同的方式使用它。在這種情況下,我不希望我的bean有一個公共切入點方法,因爲它可能不屬於這個對象在商業意義上的含義。對我個人而言,它似乎也更加孤立。好像我會更安全。如果後來我決定通過非aop方式使用BlaBla,會怎麼樣?在這種情況下,我只是刪除配置,而不是觸及它。 –

+0

我不會購買你的觀點,但祝你好運。 – kriegaex

回答

0

您需要創建另一個類BlaBlaAopConfig或類似於您的配置類的類。

Java配置與xml沒有區別,您需要定義它,並且您應該將它與您的代碼分開。只有在使用java config over xml時纔會有所不同,或者更糟(取決於個人偏好)。但是你不想在一個類中混合aop和pojo代碼。

您將定義@Pointcut你的目標類BLABLA

+0

我明白這一點,但在這種情況下BlaBlaAopConfig成爲它自身的方面?所以這是一個委託方法之前和之後的BlaBla bean的一個方面。與製作BlaBla方面不同嗎? 換句話說,在我提供的xml示例中,BlaBla是一個方面。 您提供的示例使BlaBlaAopConfig成爲委託給Blajo的一個方面,這是一個pojo。我想要的是一個等價於xml配置的代碼,我想在SpringConfig.java中聲明BlaBla是一個方面。但同時不要觸及BlaBla課堂並將其留作POJO。 –

+0

那麼它沒有任何意義。 BlaBla是POJO,它本身不應該是一個方面。相當於xml的代碼正是我的解決方案。在xml中,您只需引用您在BlaBlaAopConfig中的@Pointcut中執行的對象。你有兩個**獨立的** xml標籤,一個用於aop和java配置的bean一個只是在java中編寫配置的方法,所以你需要完全一樣的東西! – mklimasz

+0

經過一番思考,我意識到我對此太嚴格了。你是對的。 –

相關問題