【问题标题】:How can I make @Resource annotation work with Tomcat?如何使 @Resource 注释与 Tomcat 一起工作?
【发布时间】:2014-06-17 02:49:24
【问题描述】:

我有这个简单的代码:

public class TestClass {

    @Resource(name="jdbc/superblog")
    DataSource dataSource;

    public void testMethod() throws SQLException {
       /* try {
            Context ctx = new InitialContext();
            dataSource = (DataSource)ctx.lookup("java:comp/env/jdbc/superblog");
        } catch (NamingException e) {
            e.printStackTrace();
        }*/
        final Connection connection = dataSource.getConnection();
    }
} 

因此,如果我将代码与 try / catch 块一起使用,它就可以工作..(如果我注释 @Resource 注释。)

但是上面的代码将不起作用,因为 dataSource 将为空。

如何使@Resource 注释起作用? Tomcat 6 和 7 都试过了,没区别。

【问题讨论】:

标签: java tomcat datasource


【解决方案1】:

如何使@Resource 注解起作用?

您必须将 @Resource 注释添加到 servlet、过滤器或其他受支持的类。 servlet 3.0 specification 声明容器不需要对未实现以下任何接口的类执行注解注入。

javax.servlet.Servlet
javax.servlet.Filter
javax.servlet.ServletContextListener
javax.servlet.ServletContextAttributeListener 
javax.servlet.ServletRequestListener
javax.servlet.ServletRequestAttributeListener
javax.servlet.http.HttpSessionListener
javax.servlet.http.HttpSessionAttributeListener
javax.servlet.AsyncListener

由于您的测试类没有实现任何这些接口,我不希望资源注入起作用。

【讨论】:

  • 谢谢,很好的回答。
  • Servlet 3.0 规范链接已损坏。
猜你喜欢
  • 2012-06-04
  • 2011-08-30
  • 2021-11-13
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2011-06-19
  • 2011-12-14
相关资源
最近更新 更多