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.