Java CDI从另一个JAR装饰服务
我想使用CDI的Decorator模式来增强服务提供的业务逻辑。我试图修饰的服务位于另一个模块中(用maven术语),因此是另一个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一样
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注释指定
由多个应用程序组成的应用程序的全局装饰程序
模块
在我的工作示例存储库中,Branchsolution
以正确的方式解决了问题
@Decorator
@Priority(Interceptor.Priority.APPLICATION)
public abstract class CoderDecorator implements Coder { ... }