CDI从另一个罐子装饰服务

CDI decorating a service from another JAR(CDI从另一个罐子装饰服务)

本文介绍了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从另一个罐子装饰服务

基础教程推荐