首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Resource注解在没有spring-framework的情况下可以正常使用吗?

@Resource注解在没有spring-framework的情况下可以正常使用吗?
EN

Stack Overflow用户
提问于 2019-05-25 14:52:13
回答 1查看 867关注 0票数 3

我最近知道了@Resource注解和@Autowired注解之间的区别,但在spring-framework发明之前,我不知道@Resource注解将用于什么场景。

我已经在google和stackoverflow上搜索过任何提示,但没有得到任何合理的解释。然后,我尝试创建一个Java Web项目(使用J2EE1.4、jdk1.7、tomcat7),并使用@Resource注释创建一个servlet来模拟Spring的自动布线行为,但是我们遇到了一个错误。

下面是我使用的代码:

代码语言:javascript
复制
public class TestServlet extends HttpServlet {


    public void init() throws ServletException {
        Student student=new Student("1");
    }
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub

        System.out.println("111111111111");
    }

}
代码语言:javascript
复制
public class TestServlet2 extends HttpServlet {
    @Resource
    Student student;
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println(student);
    }

}

首先,我访问TestServlet以创建学生java bean,然后访问TestServlet2以将学生对象注入到学生属性中。但我遇到如下错误:

代码语言:javascript
复制
javax.naming.NamingException: Cannot create resource instance
    at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:115)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:848)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:836)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:173)
    at org.apache.catalina.core.DefaultInstanceManager.lookupFieldResource(DefaultInstanceManager.java:538)
    at org.apache.catalina.core.DefaultInstanceManager.processAnnotations(DefaultInstanceManager.java:440)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:133)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:114)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1133)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:853)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2549)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2538)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
EN

回答 1

Stack Overflow用户

发布于 2019-05-25 16:22:56

我的解决方案是:我在WebRoot/ perfectly.This -INF中创建了一个文件Context.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="student" auth="Container"
     type="com.test.Student" factory="org.apache.naming.factory.BeanFactory" id="5">
</Resource>
</Context>
代码语言:javascript
复制
public class TestServlet2 extends HttpServlet {
    @Resource(name="student")
    Student student;
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        System.out.println(student.getId());
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56302487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档