我在尋找對這個問題的更好的理解。一個解決方法非常簡單,即將配置數據移動到另一個沒有代理/建議的類中,但是我認爲更好地理解這將幫助我避免將來出現其他相關問題,所以我希望不管任何解釋可以提供。爲什麼Spring @Value與@Controller不兼容?
我在Spring STS和vFabric tc服務器上使用Spring 3.1.0.RELEASE。使用@Controller類實現一個基本的小型REST服務器。這非常棒(實際上是這樣),但@Controller也是@Transactional,並且在加載時間編織和vFabric tc服務器之間,它打破了@Value。
@Controller
@RequestMapping("/hello")
public class MyAPI {
@Value("${my.property}")
private String prop;
...
@Transactional
handleRequest(...) ...
}
而且屬性文件app.properties:
my.property = SUCCESS
這JUnit的下正常工作,與測試越來越有支撐設置爲「成功」一MyAPI對象。但是當應用程序被加載到vFabric中時,我猜測它會加載時間編織和代理。無論發生什麼事情,都會創建兩個MyAPI實例,其中一個具有prop ==「SUCCESS」,另一個(不幸是處理http請求的那個)具有prop ==「$ {my.prop}」。
總而言之,我稱之爲魔法失敗,這是我最喜歡使用AOP之類的東西。即使使用STS,我也不知道如何找出問題背後的原因,或者找出這是一個嚴重的錯誤。如果它是一個bug,我不知道它是否是Spring,AspectJ,加載時織布工或vFabric中的一個bug,所以我甚至不知道在哪裏提交錯誤報告。
因此,任何幫助理解這一點,將不勝感激。謝謝。
你確定它是由AOP引起的嗎?如果刪除'@ Transactional'會怎麼樣? – axtavt 2012-04-11 08:50:17
@axtavt你指出我的解決方案[這裏](http://stackoverflow.com/a/4335438/712765)。在下面全部看到我的答案,但簡短的答案是'Controller's單獨在我的(錯誤)配置中創建兩次。 '@ Transactional'不是問題,因爲它使用AspectJ而不是代理。 – 2012-04-12 02:55:38