Por que o Spring @Value é incompatível com o @Controller?

Eu estou procurando uma melhor compreensão deste problema. Uma solução alternativa é bem simples, a saber, mover os dados de configuração para outra classe que não tenha proxies / advisors envolvidos, mas acho que entender isso melhor me ajudará a evitar outros problemas relacionados no futuro, então eu gostaria de qualquer explicação pode fornecer.

Estou usando o Spring 3.1.0.RELEASE com Spring STS e o servidor vFabric tc. Implementado um pequeno servidor REST básico usando uma classe @Controller. Isso é tudo ótimo (na verdade, é), mas o @Controller também é @Transactional e, entre isso e a tecelagem de tempo de carregamento e o servidor vFabric tc, ele quebra @Value.

<code>@Controller
@RequestMapping("/hello")
public class MyAPI {

    @Value("${my.property}")
    private String prop;
    ...

    @Transactional
    handleRequest(...) ...


}
</code>

E um arquivo de propriedades app.properties:

<code>my.property = SUCCESS
</code>

Isso funciona bem no JUnit, com o teste obtendo um objeto MyAPI que tem prop definido como "SUCCESS". Mas quando o aplicativo é carregado no vFabric, acredito que ele tenha tempo de processamento e proxy. Aconteça o que acontecer, existem duas instâncias MyAPI criadas, uma que tem prop == "SUCCESS" e outra (que é infelizmente a que lida com a solicitação http) que tem prop == "$ {my.prop}".

Então, tudo isso eu chamo isso de falha de mágica, que é a minha maior preocupação em usar coisas como AOP. Mesmo com o STS eu não sei como rastrear qual é a causa por trás do problema ou descobrir se isso é um bug sério. Se é um bug, eu não sei se é um bug no Spring, AspectJ, o weaver de tempo de carregamento ou vFabric, então eu nem sei onde registrar um relatório de bug.

Então, qualquer ajuda para entender isso seria apreciada. Obrigado.

questionAnswers(4)

yourAnswerToTheQuestion