Я ищу лучшее понимание этой проблемы. Обходной путь довольно прост, а именно переместить данные конфигурации в другой класс, который не имеет прокси/рекомендаций, обернутых вокруг него, но я думаю, что понимание этого поможет мне избежать других связанных проблем в будущем, поэтому я бы хотел, чтобы кто-нибудь объяснил может обеспечить.
Я использую Spring 3.1.0.RELEASE с Spring STS и сервером vFabric tc. Реализован базовый небольшой REST-сервер с использованием класса @Controller. Это все здорово (правда, так оно и есть), но @Controller также является @Transactional, и между этим и переплетением времени загрузки и tc-сервером vFabric он ломает @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}".
Так что в целом я называю это провалом магии, что больше всего беспокоит меня при использовании таких вещей, как АОП. Даже с STS я не знаю, как отследить причину проблемы или выяснить, является ли это серьезной ошибкой. Если это ошибка, то я не знаю, является ли это ошибкой Spring, AspectJ, ткача во время загрузки или vFabric, поэтому я даже не знаю, куда подать отчет об ошибке.
Поэтому любая помощь в понимании этого будет оценена по достоинству. Спасибо.
@Transactional
? - person axtavt   schedule 11.04.2012Controller
создаются дважды в моей (неправильной) конфигурации. С@Transactional
проблем нет, так как он использует AspectJ, а не прокси. - person Old Pro   schedule 12.04.2012