【发布时间】:2015-01-19 18:00:05
【问题描述】:
问题
我正在处理遗留数据和一些多功能实现的支持。我可以使用以下基本代码轻松注入完全托管的 bean 实例:
InitialContext initialContext = new InitialContext();
BeanManager beanManager = (BeanManager) initialContext.lookup(BEAN_MANAGER_JNDI_NAME);
Set<Bean<?>> beans = beanManager.getBeans(beanClass);
Bean bean = beanManager.getBeans(beanClass).iterator().next();
CreationalContext creationalContext = beanManager.createCreationalContext(bean);
T managedInstance = (T) beanManager.getReference(bean, beanClass, creationalContext);
但是,如果想从@Producer 实现中注入数据,它就不起作用了。
使用经典示例:
@Produces
@LoggerType
public Logger getLogger (InjectionPoint) { ... }
在我的课堂上这没有得到解决:
@Inject
@LoggerType
Logger log;
我的解决方法只是获取我正在使用的类的完全托管实例,然后以以下方式复制内容:
MyType managedInstance = CdiUtilities.getManagedInstance(getClass());
this.log = managedInstance.log;
我将如何做到这一点?
我需要做些什么来注册@Producer 数据吗?
详情
我正在 Wildly 上使用:
- jboss-javaee-6.0-with-tools (1.0.0.M1)
- javax.servlet-api (3.1.0)
- javax cdi-api
- jboss-annotations-api_1.1_spec
- jboss-ejb-api_3.1_spec
限定词非常简单:
@Qualifier
@Retention (RetentionPolicy.RUNTIME)
@Target ({ElementType.FIELD, ElementType.METHOD})
public @interface LoggerType { }
【问题讨论】:
-
使用经典示例时应用服务器会抛出异常吗?你的限定符@LoggerType 的代码是什么样的?
-
还请说明您正在使用的 CDI 实现、版本等。
-
在上面添加了信息。
标签: jakarta-ee cdi