本文介绍了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装饰器模式有这样的限制吗?还是我做错了什么?
感谢您的真知灼见。
推荐答案
好的,正式化我的问题帮助我找到了答案。
@Decorator
@Priority(Interceptor.Priority.APPLICATION)
public abstract class CoderDecorator implements Coder { ... }
我的工作示例存储库中的分支solution
以正确的方式解决了问题。
这篇关于CDI从另一个罐子装饰服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!