我正在寻找对这个问题的更好理解。一种解决方法非常简单,即将配置数据移动到另一个没有代理/建议的类,但我认为更好地理解这一点将有助于我将来避免其他相关问题,所以我想要任何解释可以提供。
我将 Spring 3.1.0.RELEASE 与 Spring STS 和 vFabric tc 服务器一起使用。使用 @Controller 类实现了一个基本的小型 REST 服务器。这一切都很好(确实如此),但@Controller 也是@Transactional,在它与加载时间编织和 vFabric tc 服务器之间,它破坏了@Value。
@Controller
@RequestMapping("/hello")
public class MyAPI {
@Value("${my.property}")
private String prop;
...
@Transactional
handleRequest(...) ...
}
还有一个属性文件 app.properties:
my.property = SUCCESS
这在 JUnit 下运行良好,测试获得了一个将 prop 设置为“SUCCESS”的 MyAPI 对象。但是当应用程序被加载到 vFabric 中时,我猜它会获得加载时间编织和代理。无论发生什么,都会创建两个 MyAPI 实例,一个具有 prop == "SUCCESS",另一个(不幸的是,它是处理 http 请求的那个)具有 prop == "${my.prop}"。
所以总而言之,我称之为魔法失败,这是我使用 AOP 之类的东西时最关心的问题。即使使用 STS,我也不知道如何找出问题背后的原因或弄清楚这是否是一个严重的错误。如果是 bug,我不知道是 Spring、AspectJ、load-time weaver 还是 vFabric 中的 bug,所以我什至不知道在哪里提交 bug 报告。
因此,对于理解这一点的任何帮助将不胜感激。谢谢。