tomcat - CDI 注入(inject) Servlet 3.0 容器中的外部过滤器和 Servlet

标签 tomcat cdi jboss-weld

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

“检测到 Tomcat 7,CDI 注入(inject)将在 Servlet 和过滤器中可用”

例如,如何在过滤器/Servlet 之外使用 BeanManager 创建一个 bean 实例?

我有一个 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/filter 中完成,我相信它可以在其他任何地方完成,但我只是不想在没有先询问的情况下通过 Weld 代码自己弄清楚。

非常感谢。

最佳答案

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

如果您确实需要它,请使用 manager.getBeans(yourDesiredClass),然后从集合中选择一个并调用 manager.getReference(bean, theClass, ctx)ctx 会通过manager.createCreationalContext(bean)

获取

关于tomcat - CDI 注入(inject) Servlet 3.0 容器中的外部过滤器和 Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133412/

相关文章:

jakarta-ee - "Exception while loading the app"没有堆栈跟踪

java - DHIS2 的替代用例

java - Servlet/Tomcat 相对文件路径

java - 我可以将 POJO 注入(inject) Backing Bean 吗?和 POJO 的@Entity?它是如何工作的?

java - 我可以使用带有 CDI 的 EJB 无状态 Bean 来维护用户 session 吗?

java - 哪里允许注入(inject)EJB?

jsf - 焊接1.0.1-最终: Conversation Scope bean keeps recreated even after beginning conversation?

java - Java Jersey 中的地理位置

java - 内存问题 - Java 8 + Tomcat 6 与 Java 8 + Tomcat 8

java - 为什么 Wildfly 说在部署时我的 REST 资源文件带有 @RequestScoped 注释,但事实并非如此?