CDI decorating a service from another JAR(CDI从另一个罐子装饰服务)
问题描述
我想使用CDI的Decorator模式来增强服务提供的业务逻辑。我试图修饰的服务位于另一个模块中(用maven术语来说),因此是另一个JAR。例如,提供的服务在模块com.acme.provider
中,而装饰符在com.acme.consumer
中,紧挨着服务使用者。
我的服务按原样注入,没有任何修饰。
装饰符在使用者模块内的beans.xml
中声明。
我提供了一个工作示例here。在mvn install
上,测试打印"Hello",而不是应用修饰符时的"Hello World"。
如果我将修饰符(及其XML声明)移动到Providers模块(请参阅同一存储库的分支decorator-in-provider
),则一切正常,并打印出"Hello World"。
如果装饰器只有在提供者Bean和装饰器本身的代码都在同一模块中时才能工作,我认为它几乎没有什么用处。对Java EE装饰器模式有这样的限制吗?还是我做错了什么?
感谢您的真知灼见。
推荐答案
好的,正式化我的问题帮助我找到了答案。
根据Oracle's tutorials:
您在beans.xml文件中指定的修饰符仅适用于 类在同一存档中。使用@PRIORITY注释指定 应用程序的全局修饰符,该应用程序由 模块。
@Decorator
@Priority(Interceptor.Priority.APPLICATION)
public abstract class CoderDecorator implements Coder { ... }
我的工作示例存储库中的分支solution
以正确的方式解决了问题。
这篇关于CDI从另一个罐子装饰服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:CDI从另一个罐子装饰服务
基础教程推荐
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01