Java CDI从另一个JAR装饰服务

Java CDI从另一个JAR装饰服务,java,jakarta-ee,cdi,decorator,Java,Jakarta Ee,Cdi,Decorator,我想使用CDI的Decorator模式来增强服务提供的业务逻辑。我试图修饰的服务位于另一个模块中(用maven术语),因此是另一个JAR。例如,提供的服务位于模块com.acme.provider中,而装饰器位于服务使用者旁边的com.acme.consumer中 我的服务是按原样注入的,没有任何装饰 decorator在consumer模块内的beans.xml中声明 我提供了一个工作示例。当mvn安装时,测试打印“Hello”而不是“Hello World”,就像应用decorator一样

我想使用CDI的Decorator模式来增强服务提供的业务逻辑。我试图修饰的服务位于另一个模块中(用maven术语),因此是另一个JAR。例如,提供的服务位于模块
com.acme.provider
中,而装饰器位于服务使用者旁边的
com.acme.consumer

我的服务是按原样注入的,没有任何装饰

decorator在consumer模块内的
beans.xml
中声明

我提供了一个工作示例。当mvn安装时,测试打印“Hello”而不是“Hello World”,就像应用decorator一样

如果我将decorator(及其xml声明)移动到providers模块(请参阅同一存储库的provider中的分支
decorator),那么一切都会正常工作,并打印“helloworld”

如果decorator只在提供者bean和decorator本身的代码都在同一个模块中时才工作,我看不出它有什么用处。JavaEE装饰器模式有这样的限制吗?还是我做错了什么


谢谢你的见解。

好的,形式化的问题帮助我找到了答案

根据:

您在beans.xml文件中指定的装饰器仅适用于 同一存档中的类。使用@Priority注释指定 由多个应用程序组成的应用程序的全局装饰程序 模块


分支
解决方案
在我的工作示例存储库中,以正确的方式解决了问题。

好的,形式化问题帮助我找到了答案

根据:

您在beans.xml文件中指定的装饰器仅适用于 同一存档中的类。使用@Priority注释指定 由多个应用程序组成的应用程序的全局装饰程序 模块

在我的工作示例存储库中,Branch
solution
以正确的方式解决了问题

@Decorator
@Priority(Interceptor.Priority.APPLICATION)
public abstract class CoderDecorator implements Coder { ... }