Dlaczego Spring @ Value jest niekompatybilny z @Controller?
Szukam lepszego zrozumienia tego problemu. Obejście problemu jest dość proste, a mianowicie przeniesienie danych konfiguracyjnych do innej klasy, która nie ma owiniętych serwerów proxy / porad, ale myślę, że lepsze zrozumienie tego pomoże mi uniknąć innych powiązanych problemów w przyszłości, więc chciałbym, aby ktokolwiek wyjaśnił może zapewnić.
Używam Spring 3.1.0.RELEASE z Spring STS i serwerem vFabric tc. Zaimplementowano podstawowy mały serwer REST za pomocą klasy @Controller. To wszystko jest świetne (tak naprawdę jest), ale @Controller jest także @Transactional, a między tym a tkaniem czasu ładowania i serwerem vFabric tc przerywa @Value.
<code>@Controller @RequestMapping("/hello") public class MyAPI { @Value("${my.property}") private String prop; ... @Transactional handleRequest(...) ... } </code>
I plik właściwości app.properties:
<code>my.property = SUCCESS </code>
Działa to dobrze w JUnit, z testem pobierającym obiekt MyAPI, który ma prop ustawiony na „SUCCESS”. Ale kiedy aplikacja zostanie załadowana do vFabric, zgaduję, że pobiera czas ładowania tkania i proxy. Cokolwiek się stanie, są dwie instancje MyAPI, jedna z nich ma prop == „SUCCESS”, a druga (niestety to ta, która obsługuje żądanie http), która ma prop == „$ {my.prop}”.
W sumie nazywam to niepowodzeniem magii, co jest moim największym zmartwieniem w używaniu rzeczy takich jak AOP. Nawet z STS nie wiem, jak wyśledzić przyczynę problemu lub dowiedzieć się, czy jest to poważny błąd. Jeśli jest to błąd, nie wiem, czy jest to błąd w Spring, AspectJ, tkacz czasu ładowania, czy vFabric, więc nawet nie wiem, gdzie złożyć raport o błędzie.
Każda pomoc w zrozumieniu tego byłaby doceniana. Dzięki.