【发布时间】:2019-10-25 02:31:48
【问题描述】:
我想使用 CDI 的装饰器模式来增强服务提供的业务逻辑。我试图装饰的服务位于另一个模块中(在 Maven 术语中),因此是另一个 JAR。例如,提供的服务位于模块 com.acme.provider 中,而装饰器位于服务使用者旁边的 com.acme.consumer 中。
我的服务按原样注入,没有任何装饰。
装饰器在消费者模块内的beans.xml 中声明。
我提供了一个工作示例here。在mvn install 上,测试打印“Hello”而不是“Hello World”,因为它会应用装饰器。
如果我将装饰器(及其 xml 声明)移动到提供程序模块(参见同一存储库的分支 decorator-in-provider),则一切正常并打印“Hello World”。
如果装饰器仅在提供程序 bean 和装饰器本身的代码在同一个模块中时才起作用,那么我看不到它的用处。 Java EE 装饰器模式有这样的限制吗?还是我做错了什么?
感谢您的见解。
【问题讨论】:
标签: java jakarta-ee cdi decorator