Spring правильно подключает ваш бин, проблема в том, что контейнер сервлета создает ваш сервлет независимо от пружины.Таким образом, у вас в основном есть два разных экземпляра - один создан Spring, а другой - контейнером.
Один обходной путь - использовать ServletContextAttributeExporter
, поместив в ваш app-context.xml следующее:
<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
<property name="attributes">
<map>
<entry key="userDao">
<ref bean="userDao"/>
</entry>
</map>
</property>
и затем в вашем сервлете:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
UserDao userDao = (UserDao)getServletContext().getAttribute("userDao");
// do something with userDao
PrintWriter writer = response.getWriter();
writer.write("hello");
}
другой - это прямой доступ к WebApplicationContext
:
protected void doGet(HttpServletRequest reqest, HttpServletResponse response)
throws ServletException, IOException {
WebApplicationContext springContext = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
UserDao userDao =(UserDao)springContext.getBean("userDao");
}
... или просто использовать Spring MVC и позволить емуautowire все как надо.
Также смотрите этот пост .Возможно, будет проще преобразовать ваш сервлет в HttpRequestHandler
и позволить ему обслуживаться HttpRequestHandlerServlet
, оба предоставлены spring.