【发布时间】:2014-05-26 18:43:41
【问题描述】:
目前我正在使用代理进行缓存抽象。代理的问题是内部方法调用不起作用。现在,我想使用编译时编织而不是代理作为内部方法调用的工作原理。我在谷歌上搜索过,但我没有找到任何解释如何使用编译时编织的实质性链接。加载时间编织有很多链接。谁能给出任何使用缓存抽象或一些相关链接进行编译时编织的示例??
提前致谢。
【问题讨论】:
标签: spring caching aspectj compile-time-weaving
目前我正在使用代理进行缓存抽象。代理的问题是内部方法调用不起作用。现在,我想使用编译时编织而不是代理作为内部方法调用的工作原理。我在谷歌上搜索过,但我没有找到任何解释如何使用编译时编织的实质性链接。加载时间编织有很多链接。谁能给出任何使用缓存抽象或一些相关链接进行编译时编织的示例??
提前致谢。
【问题讨论】:
标签: spring caching aspectj compile-time-weaving
您可以使用 maven aspectj 插件添加用于缓存的 spring 方面,方法是识别方面类并将其手动应用于所需的类(检查方面的 spring-aspects 和 spring-cache jars)。
这种机制与弹簧没有直接联系,它可以在任何方面完成,而不仅仅是弹簧方面。
之所以没有使用,是因为不是很方便,因为我们需要在编译的时候就知道要通知的类,不能依赖spring注解扫描机制。
加载时间编织解决了您提到的使可重入调用以更透明的方式工作的问题,而没有编译时间编织的不便。加载时编织是 spring 使用 aspectJ 编织的推荐方式,由注释 @EnableLoadTimeWeaving 启用。
对于您提到的具体用例,似乎没有引入编译时编织的好案例,一般来说编译时编织没有好的用例,这解释了在线缺乏可用的文档。
我相信您提到的用例的最佳选择是使用加载时间编织。
【讨论】:
@Service 和 @Repository 类.这只会在服务器启动时每个服务/存储库类发生一次,然后各个方面都会到位,您不会注意到性能上有任何差异