如何使用spring的autowire为servlet注入bean

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用spring的autowire为servlet注入bean相关的知识,希望对你有一定的参考价值。

在applicationContext.xml中定义数据层访问Bean:

<bean id="userDao" class="test.UserDaoImpl"></bean>

public class MyServlet extends HttpServlet   
    private static final long serialVersionUID = 1L;  
  
    private UserDao userDao; 
    ....

注入方法::在Servlet的init方法中增加以下代码:

public void init(ServletConfig config) throws ServletException 
   SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
         config.getServletContext());

并且在变量userDao上一行增加@Autowired:

@Autowired
private UserDao userDao;

参考技术A 使用spring的autowire为servlet注入bean:
思路:
1.创建一个类似于DelegatingFilterProxy那样的代理,通过代理根据配置来找到实际的Servlet,完成业务逻辑功能。
假定有一个Servlet名字叫UserServlet,需要注入一个UserManager,伪代码如下:
public class UserServlet extends HttpServlet
@Autowired(required = true)
private UserManager userManager;

2.配置web.xml文件,原来UserServlet的配置大致是这样的:
<servlet>
<servlet-name>userServlet</servlet-name>
<servlet-class>com.sample.DelegatingServletProxy</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>userServlet</servlet-name>
<url-pattern>/userServlet</url-pattern>
</servlet-mapping>
注意:spring是根据Servlet的名字来查找被代理的Servlet的,所以,首先要在UserServlet类前面加上 @Component,来告诉Srping:也是一个Bean。如果名称和Web.xml里面定义的不一样的话,可以在这里指定Bean的名字,比如: @Component(“userServlet”)
spring配置 文件中:
<bean id=”menueInitServlet”>
<property name=”userService” ref=”userService”></property>

以上是关于如何使用spring的autowire为servlet注入bean的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 类之间正确注入 @Autowired?

如何在 Spring Boot 中手动新建实例中使用 @Autowired

@Autowired 注解是如何实现的?

Spring MVC - @Autowired 如何工作?

在 Spring 中使用 @Autowired 注解时出现以下错误应该如何解决?

为啥我的 Spring @Autowired 字段为空?