我有这个简单的代码:
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 将为null。
如何使@Resource注释有效?我尝试了Tomcat 6和7,没有区别。
答案 0 :(得分:3)
如何使@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
由于您的测试类没有实现任何这些接口,我不希望资源注入工作。