Java 将JNDI查找替换为@Resource注释

Java 将JNDI查找替换为@Resource注释,java,Java,我使用此代码通过jndi查找访问数据库连接 Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); DataSource datasource = (DataSource)envContext.lookup("TestDB"); Connection connection = datasource.getConnection()

我使用此代码通过jndi查找访问数据库连接

Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource datasource = (DataSource)envContext.lookup("TestDB");
Connection connection = datasource.getConnection();
它工作得很好。后来我用注释替换了它,以便对以下代码执行相同的操作

@Resource(name="TestDB")
DataSource datasource;

methodName(){
if(datasource!=null){
Connection connection = datasource.getConnection();}
else{
   System.out.println("Datasource is null");
     }
    }
但我得到了“数据源为空”。我还尝试了@Resource(lookup=“TestDB”),但仍然得到了“datasourceisnull”。
为什么数据源是空的

我的问题如以下评论所述:


使用InitialContext的查找正在工作,而使用@resource的查找没有工作。一旦我将@Resource声明从常规java类移动到servlet类,它就开始工作了。容器(在我的例子中是Tomcat 8)只是检查注释的知名组件

您是否正确使用依赖注入引擎,例如,您的类是由Spring创建的,还是调用注入器来注入注释属性?在Tomcat 6上的整个项目中,我使用了@Resource,但它在Tomcat 7上都停止了工作。必须回到旧代码。我一直都不知道为什么。我想你应该跑去见我。