【问题标题】:JBoss AS7 @Inject bean into valveJBoss AS7 @Inject bean into Valve
【发布时间】:2014-03-28 16:53:42
【问题描述】:
是否可以将@Inject 无状态会话 bean 转换为 AuthenticatorBase 的子类?
我使用 JBoss 作为 7.1.1。
我的代码如下所示:
...
public class myValve extends AuthenticatorBase {
@Inject AuthController controller;
//some code ...
}
使用控制器对象导致NullPointerException。
【问题讨论】:
标签:
jboss
cdi
inject
tomcat-valve
【解决方案1】:
如果控制器为空,则意味着 myValve 对象本身没有被注入。
可以追溯性地将现有对象添加到 CDI 上下文中,例如使用以下代码:
public <T> void addToCDI(T object) {
BeanManager beanManager = BeanManagerProvider.getInstance().getBeanManager();
AnnotatedType<T> annotatedType = beanManager.createAnnotatedType((Class<T>)bject.getClass());
InjectionTarget<T> injectionTarget = beanManager.createInjectionTarget(annotatedType);
CreationalContext<T> context = beanManager.createCreationalContext(null);
injectionTarget.inject(object, context);
}
执行此代码后,注入已执行。