Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向消息驱动Bean添加CDI装饰器_Java_Decorator_Cdi_Message Driven Bean - Fatal编程技术网

Java 向消息驱动Bean添加CDI装饰器

Java 向消息驱动Bean添加CDI装饰器,java,decorator,cdi,message-driven-bean,Java,Decorator,Cdi,Message Driven Bean,给定以下消息驱动Bean,是否可以从CDI规范中定义一个全局装饰器来添加其他行为 @MessageDriven public class MyMessageDrivenBean implements MessageListener { @Override public void onMessage(Message m) { } } 装饰者看起来像这样: @Decorator @Priority(Interceptor.Priority.APPLICATION) pu

给定以下消息驱动Bean,是否可以从CDI规范中定义一个全局装饰器来添加其他行为

@MessageDriven
public class MyMessageDrivenBean implements MessageListener {

    @Override
    public void onMessage(Message m) {

    }
}
装饰者看起来像这样:

@Decorator
@Priority(Interceptor.Priority.APPLICATION)
public abstract DecorateMyMessageDrivenBean implements MessageListener {

    @Inject
    @Delegate
    @Any
    private MessageListener delegate;

    @Override
    public void onMessage(Message m) {

    }
}
目前,没有执行装饰程序。我已经在我的模块中添加了一个beans.xml文件。

简短的回答(但不要失去希望)是否定的,因为
@MessageDrivenBean
不是CDI管理的bean,而且

现在,你可能能做的(我自己没有做这件事的经验)是这样的:

@Decorator
@Priority(Interceptor.Priority.APPLICATION)
public abstract DecorateMyMessageDrivenBean implements MessageListener {

    @Inject
    @Delegate
    @Any
    private MessageListener delegate;

    @Override
    public void onMessage(Message m) {

    }
}
  • 用于调用一个
    MessageListener
    由JavaEE注入字段,而不是由CDI注入(因此将在JNDI中查找)
  • 编写一个producer方法,该方法通过使用该字段的内容和方法的组合来生成
    MessageListener
    实例
  • @Inject
    无论您想在哪里使用它,都会生成这样的
    MessageListener
实际上,只有一种机制可以动态地将拦截(decorator只是拦截的一种非常特殊的情况)添加到非CDI管理的bean中

最后,这只有在使用CDI2.0(JavaEE8或更高版本)时才起作用