【问题标题】:How to use @Resource annotation in servlet (or in any other Java class)?如何在 servlet(或任何其他 Java 类)中使用 @Resource 注释?
【发布时间】:2014-12-13 13:17:52
【问题描述】:

我正在试验 Java 依赖注入。 SO上的许多问题都在谈论连接jndi资源。但我认为,可以使用 @Resource 注释来连接 java 类。我有一个简单的 servlet,其中有两个要使用 CDI 连接的属性。我正在使用 Tomcat6、Servlet 2.5 和 Weld 配置。

servlet 代码:

@Inject
private HikariConnectionProperties hikariConnectionProperties;

@Resource(name = "connectionProvider")
private IConnectionProvider connectionProvider;

但是,我编译、部署了代码。但是,当有对相应 servlet 的请求时,我会得到 javax.naming.NameNotFoundException: Name connectionProvider is not bound in this Context

但是,我有ConnectionProvider 类的@Named 注释。 对于两个字段,@Inject 的配置相同。

那么,我的第一个问题是如何解决这个问题?有什么方法可以在不使用 Spring 的@Scope 的情况下指定特定注入的范围(仅使用 JSR 的注释)?由于我是 CDI 的新手,因此任何示例都会有很大帮助。

【问题讨论】:

  • 你可以看到this linkConnectionProvider不应该是@Named,应该是@Resource@PersistenceContext
  • @Everv0id 资源也不起作用
  • 那么,如果你从注入点删除(name = "connectionProvider") 或将其添加到ConnectionProvider 声明中会发生什么?
  • @Everv0id 两者都进行了实验。 ): 没有成功。

标签: java servlets dependency-injection cdi


【解决方案1】:

@Resource 仅在您在容器中设置资源时在 Tomcat 中有效。以下是供您参考的参考:http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html

它希望您在 Tomcat 中绑定一个名为“connectionProvider”的 JNDI 条目。 CDI 不将元素绑定到 JNDI,它有自己的对象到范围的内部映射。 @Inject 在这里工作,因为您可能尚未在资源配置中为此类设置资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 2017-02-27
    • 2020-10-09
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多