У меня есть следующий фрагмент кода, который я смоделированный на this answer:Потребители инъекционных Весна @Resource в сервлет
public class DeployerServlet extends HttpServlet {
@Resource
Engine engine;
public void init(ServletConfig config) throws ServletException {
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, config.getServletContext());
}
// ...
}
Но сервлет даже не правильно инстанцирован. При создании экземпляра Tomcat пытается найти имя com.example.DeployerServlet/engine
в JNDI, что приводит к исключению,
SEVERE: Allocate exception for servlet Deploy Servlet
javax.naming.NameNotFoundException: Name com.example.DeployerServlet is not bound in this Context
Итак, что является рекомендуемым способом, чтобы придать Spring боб в сервлет?
Это зависит. Не возражаете, если вы получаете зависимости от весенних классов в вашем сервлете? – mael
Я уже отлично справился с 'SpringBeanAutowiringSupport' в моем сервлете, так что, я думаю, не проблема. Но было бы неплохо иметь декларативный '@ Resource' вместо прямого вызова' applicationContext.getBean() '. – Saintali
Поскольку Контейнер отвечает за инициализацию сервлета, вы вынуждены использовать 'SpringBeanAutowiringSupport' для достижения того, чего хотите. Весна не управляется сервлетом. –