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.

questionAnswers(4)

yourAnswerToTheQuestion