如何在servlet(或任何其他Java类)中使用@Resource注释?

时间:2014-12-13 13:17:53

标签: java servlets dependency-injection cdi

我正在尝试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

但是,@Named类有ConnectionProvider注释。 对于这两个字段,相同的配置与@Inject一起使用。

所以,我的第一个问题是如何解决这个问题?有没有什么方法可以指定特定注入的范围(仅使用JSR的注释)而不使用Spring @Scope?任何一个例子都是很有帮助的,因为我是CDI的新手。

1 个答案:

答案 0 :(得分:3)

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

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