从servlet访问spring组件

时间:2014-04-15 14:05:52

标签: spring spring-mvc servlets autowired

我有一个控制器(例如.MyManager),我调用组件类(bean)的方法(例如myMethod()),例如MyComponent。我有servlet,我想调用myMethod()。在servlet中,我通过@Autowired注释注释了MyManager,尽管我得到了NullPointerException。我看到了这种话题,但它对我没用。为了想象,我写了很少的代码:

public class myClass extends HttpServlet {

@Autowired
private MyComponent component;

public void init(ServletConfig config) throws ServletException{
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}

protected void doGet(HttpServletRequest req,HttpServletResponse res) throws ... {

List<MyObject> objects =component.myMethod();  // Here is the problem, component is null

}

}

}

我将Spring配置文件设置为“context.xml”并且我获得了bean(组件)对象,但是现在我在bean对象中注入了EntityManager有问题。现在它是null,任何人都可以帮我解决这个问题吗?还要更新init()方法。

public void init(ServletConfig config) throws ServletException{
ApplicationContext con = new ClassPathXmlApplicationContext("context.xml");
component = (MyComponent) con.getBean("myBean");
}

1 个答案:

答案 0 :(得分:6)

你不能自动装配那样的依赖,因为Servlet不是Spring Beans。您需要执行以下操作:

@Override
public void init() throws ServletException {
    super.init();
    ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
    component= applicationContext.getBean(MyComponent.class);
}

同时从@Autowired

中删除component注释