2012-01-20 55 views
0

我已經颳了很多資源,並做了這項工作,它有點複雜,這使我要求審查和其他想法如何正確注入彈簧依賴到DomainObjects ..將彈簧依賴關係注入到Domain對象的最佳實踐中?

我到目前爲止的解決方案包括..

定義需要loadweaving

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aspects</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-instrument</artifactId> 
    </dependency>  
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjweaver</artifactId> 
    </dependency> 

再依賴..在Spring上下文文件中配置它:

<context:spring-configured /> 
<context:load-time-weaver/> 

使用@Configurable我的域類:

@Configurable 
public class MyDomainClass { 
    .... 
} 

和當然,使用這些VM參數:

-XX:-UseSplitVerifier -javaagent:C:/Users/albert/.m2/repository/org/springframework/spring-instrument/3.0.6.RELEASE/spring-instrument-3.0.6.RELEASE.jar 

對於這個當前的解決方案,我有感覺這看起來太多了,就像需要大量的依賴關係一樣,還有虛擬機參數,在生產環境中部署時我不喜歡它在我不得不使用特定選項的情況下,我擔心未來可能不支持這些選項,或者在版本之間可能有不同的行爲。做與原型範圍domainObjects的

即時通訊思想,但我從數據庫中(而不是從的applicationContext)獲取域對象時,害怕的依賴問題。

請分享您的經驗,謝謝!

+0

什麼是你注入到你的域對象? –

+0

@DaveNewton:IM注射工作(http://martinfowler.com/eaaCatalog/unitOfWork.html),這是請求範圍的單位 – bertie

+0

我會*非常*謹慎採取這種方式 - 我不確知你試圖去做什麼,但是這聽起來像是有些倒退了。 –

回答

3

1:當你動態地啓動注入塞給域對象,他們真的不域對象的意義更多的是域名應該反映你的信息模型,獨立於任何業務規則和功能邏輯。

2:記住KISS(保持簡單...)。在某些時候,其他人可能不得不採取所有權和維護你的代碼,以便對那人:)

我會叫這個反模式,這在我看來應該避免一些憐憫。

+0

就我而言,其實很簡單。我的域模型的版本封裝了數據和行爲。對於某些行爲,它將在spring applicationContext中訪問一個bean。但是,訪問該bean的選項有哪些? – bertie

2

如果使用編譯時揮舞,那麼你就不需要VM參數。

+0

謝謝,我會對此進行更多研究。 – bertie

+0

@Albert Kam很容易http://static.springsource。org/spring/docs/3.0.x/spring-framework-reference/htmlsingle /#aop-atconfigurable,如果你使用maven,那麼你只需要添加aspectj編譯器 – Ralph