Chr*_*hie 30
您还可以使用CDI.current()访问BeanManager,这样可以节省您输入好几行代码的时间.从这里取的例子
使用CDI.current()
BeanManager bm = CDI.current().getBeanManager();
Run Code Online (Sandbox Code Playgroud)
使用JNDI:
BeanManager bm = null;
try {
InitialContext context = new InitialContext();
bm = (BeanManager) context.lookup("java:comp/BeanManager");
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
现在你有了BeanManager,你可以通过基于类型的查找或基于名称的查找来访问你的CDI bean.
基于类型:
Bean<CrudService> bean = (Bean<CrudService>) bm.getBeans(CrudService.class).iterator().next();
CreationalContext<CrudService> ctx = bm.createCreationalContext(bean);
CrudService crudService = (CrudService) bm.getReference(bean, CrudService.class, ctx);
Run Code Online (Sandbox Code Playgroud)
基于名称的
Bean bean = bm.getBeans("crudService").iterator().next();
CreationalContext ctx = bm.createCreationalContext(bean);
CrudService crudService = bm.getReference(bean, bean.getClass(), ctx);
Run Code Online (Sandbox Code Playgroud)
完整示例:
//get reference to BeanManager
BeanManager bm = CDI.current().getBeanManager();
Bean<CrudService> bean = (Bean<CrudService>) bm.getBeans(CrudService.class).iterator().next();
CreationalContext<CrudService> ctx = bm.createCreationalContext(bean);
//get reference to your CDI managed bean
CrudService crudService = (CrudService) bm.getReference(bean, CrudService.class, ctx);
Run Code Online (Sandbox Code Playgroud)
更新 - 如果您使用CDI 1.1,现在可以在一行中实现:
CrudService crudService = CDI.current().select(CrudService.class).get();
Run Code Online (Sandbox Code Playgroud)
您可以BeanManager
通过JNDI(java:comp/BeanManager
)查找,然后使用挂起的JSR-299 API BeanManager
来获取对托管bean的上下文引用.
JSR-299托管bean不可用于直接JNDI查找.
归档时间: |
|
查看次数: |
16455 次 |
最近记录: |