Java 将Spring@Resource注入Servlet

Java 将Spring@Resource注入Servlet,java,spring,tomcat,dependency-injection,annotations,Java,Spring,Tomcat,Dependency Injection,Annotations,我有以下一段代码,是我模仿的: 但是servlet甚至没有正确实例化。创建实例时,Tomcat尝试在JNDI中查找名称com.example.DeployerServlet/engine,结果出现异常 SEVERE: Allocate exception for servlet Deploy Servlet javax.naming.NameNotFoundException: Name com.example.DeployerServlet is not bound in this Conte

我有以下一段代码,是我模仿的:

但是servlet甚至没有正确实例化。创建实例时,Tomcat尝试在JNDI中查找名称
com.example.DeployerServlet/engine
,结果出现异常

SEVERE: Allocate exception for servlet Deploy Servlet
javax.naming.NameNotFoundException: Name com.example.DeployerServlet is not bound in this Context

那么,向servlet中注入Springbean的推荐方法是什么呢?

似乎您的构建没有正确完成。清理项目并重建。您的问题将解决

似乎是您的构建没有正确完成。清理项目并重建。您的问题将解决问题
@Resource
注释是一个问题。它用于声明对资源的引用。尽管Spring可以使用与
@Inject
@Autowired
相同的方法,但在本例中,servlet容器首先起作用。只需将您的
@Resource
替换为
@Autowired

即可
@Resource
注释是一个注释。它用于声明对资源的引用。尽管Spring可以使用与
@Inject
@Autowired
相同的方法,但在本例中,servlet容器首先起作用。只需将您的
@资源
替换为
@Autowired

,视情况而定。您介意在servlet中获得对spring类的依赖吗?我已经对servlet中的
SpringBeanAutowiringSupport
很满意,所以我想没问题。但是最好使用声明性的
@Resource
而不是直接的
applicationContext.getBean()
调用。因为容器负责初始化Servlet,所以您必须使用
SpringBeanAutowiringSupport
来实现您想要的功能。Servlet不是由Spring管理的。@SotiriosDelimanolis我明白了,但问题是,Tomcat将
@Resource
解释为JNDI查找,并在我有机会调用
SpringBeanAutowiringSupport
之前抛出异常。您是否尝试过使用
@Inject
@Autowired
?这取决于具体情况。您介意在servlet中获得对spring类的依赖吗?我已经对servlet中的
SpringBeanAutowiringSupport
很满意,所以我想没问题。但是最好使用声明性的
@Resource
而不是直接的
applicationContext.getBean()
调用。因为容器负责初始化Servlet,所以您必须使用
SpringBeanAutowiringSupport
来实现您想要的功能。Servlet不是由Spring管理的。@SotiriosDelimanolis我明白了,但问题是,Tomcat将
@Resource
解释为JNDI查找,并在我有机会调用
SpringBeanAutowiringSupport
之前引发异常。您是否尝试过使用
@Inject
@Autowired
?我使用Maven,并且在多个版本中始终出现此错误。我也不认为这会是一个构建问题,因为显然没有这样的JNDI名称。我使用Maven,并且在多个构建中一致地遇到了这个错误。我也不认为这是一个构建问题,因为显然没有这样的JNDI名称;前者只按类型绑定,使用名称(由
@Qualifier
注释提供)作为提示()。注意
@Autowired
@Resource
之间有细微的区别:后者先按名称绑定bean,然后返回按类型绑定;前者只按类型绑定,使用名称(由
@Qualifier
注释提供)作为提示()。
SEVERE: Allocate exception for servlet Deploy Servlet
javax.naming.NameNotFoundException: Name com.example.DeployerServlet is not bound in this Context