Java 向消息驱动Bean添加CDI装饰器
给定以下消息驱动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
@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) {
}
}
- 用于调用一个
由JavaEE注入字段,而不是由CDI注入(因此将在JNDI中查找)MessageListener
- 编写一个producer方法,该方法通过使用该字段的内容和方法的组合来生成
实例MessageListener
无论您想在哪里使用它,都会生成这样的@Inject
MessageListener