Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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
Tomcat Servlet 3.0容器中过滤器和Servlet外部的CDI注入_Tomcat_Cdi_Jboss Weld - Fatal编程技术网

Tomcat Servlet 3.0容器中过滤器和Servlet外部的CDI注入

Tomcat Servlet 3.0容器中过滤器和Servlet外部的CDI注入,tomcat,cdi,jboss-weld,Tomcat,Cdi,Jboss Weld,我最后决定看看Tomcat中的Weld。部署应用程序时,我会在日志中看到: “检测到Tomcat 7,CDI注入将在servlet和筛选器中可用” 例如,如何在过滤器/Servlet外部使用BeanManager创建bean实例 我有一颗豆子: @javax.inject.Named(value="CarService") @javax.enterprise.context.RequestScoped public class CarService implements Serializable

我最后决定看看Tomcat中的Weld。部署应用程序时,我会在日志中看到:

“检测到Tomcat 7,CDI注入将在servlet和筛选器中可用”

例如,如何在过滤器/Servlet外部使用BeanManager创建bean实例

我有一颗豆子:

@javax.inject.Named(value="CarService")
@javax.enterprise.context.RequestScoped
public class CarService implements Serializable{
.
.
.
我想使用BeanManager为指定的请求上下文创建一个实例

Context ctx = new InitialContext();
BeanManager manager = (BeanManager) ctx.lookup("java:comp/env/BeanManager");
// NOW WHAT?
如果这可以在servlet/过滤器中完成,我确信它可以在其他任何地方完成,但我只是不想在没有事先询问的情况下检查焊接代码并自己解决它


非常感谢。

使用
BeanManager
是您很少应该做的事情。关键是在需要依赖项的地方使用
@Inject
(即依赖项注入)。使用管理器是“服务定位器”模式


如果您确实需要它,请使用
manager.getBeans(yourDesiredClass)
,然后从集合中选择一个并调用
manager.getReference(bean,类,ctx)
ctx
将由
管理器获得。使用
BeanManager
创建上下文(bean)
是您很少应该做的事情。关键是在需要依赖项的地方使用
@Inject
(即依赖项注入)。使用管理器是“服务定位器”模式


如果您确实需要它,请使用
manager.getBeans(yourDesiredClass)
,然后从集合中选择一个并调用
manager.getReference(bean,类,ctx)
ctx
将由
manager获得。createCreationalContext(bean)

我已经使用了这个Seam代码,它提供了我所需要的一切

public static <T> T getContextualInstance(final BeanManager manager, final Class<T> type) {
        T result = null;
        Bean<T> bean = (Bean<T>) manager.resolve(manager.getBeans(type));
        if (bean != null) {
            CreationalContext<T> context = manager.createCreationalContext(bean);
            if (context != null) {
                result = (T) manager.getReference(bean, type, context);
            }
        }
        return result;
    }
publicstatict getContextualInstance(最终BeanManager管理器,最终类类型){
T结果=null;
Bean=(Bean)manager.resolve(manager.getbean(type));
if(bean!=null){
CreationalContext=manager.createCreationalContext(bean);
if(上下文!=null){
result=(T)manager.getReference(bean、类型、上下文);
}
}
返回结果;
}

我已经使用了这个Seam代码,它提供了我所需要的一切

public static <T> T getContextualInstance(final BeanManager manager, final Class<T> type) {
        T result = null;
        Bean<T> bean = (Bean<T>) manager.resolve(manager.getBeans(type));
        if (bean != null) {
            CreationalContext<T> context = manager.createCreationalContext(bean);
            if (context != null) {
                result = (T) manager.getReference(bean, type, context);
            }
        }
        return result;
    }
publicstatict getContextualInstance(最终BeanManager管理器,最终类类型){
T结果=null;
Bean=(Bean)manager.resolve(manager.getbean(type));
if(bean!=null){
CreationalContext=manager.createCreationalContext(bean);
if(上下文!=null){
result=(T)manager.getReference(bean、类型、上下文);
}
}
返回结果;
}

我没弄明白。你想干什么?你想在哪门课上使用这个bean?我不明白。你想干什么?你想在哪个班使用这个bean?谢谢你的帮助!我之所以需要它,是因为我希望BlazeDS使用BeanManager,它允许我在服务对象中使用注入。所以我认为这是一个实际需要的情况。方法manager.resolve(manager.getBeans(type))为我解析bean,而不需要按照您的建议遍历集合。flex集成看起来确实像是一个需要与bean管理器进行交互的地方。感谢您的帮助!我之所以需要它,是因为我希望BlazeDS使用BeanManager,它允许我在服务对象中使用注入。所以我认为这是一个实际需要的情况。方法manager.resolve(manager.getBeans(type))为我解析bean,而不需要按照您的建议遍历集合。flex集成看起来确实像是一个需要与bean管理器交互的地方。