如何在Spring 3.1中构造-autowire HttpServletResponse?

时间:2012-01-16 23:36:21

标签: spring dependency-injection constructor-injection

我有一个请求范围的bean,我需要访问HttpServletResponse和HttpServletRequest对象。

我需要在构造函数中访问这些对象,因此属性自动装配不是一种选择。

我做了以下事情:

@Component
@Scope("request")
public class MyClass{

    @Autowired(required=true)
    public MyClass(HttpServletRequest request, HttpServletResponse response) {

        // do stuff I need to do in the constructor

    }
}

这给了我以下错误:

  

找不到默认构造函数;嵌套异常是java.lang.NoSuchMethodException:com.foo.bar.MyClass。()

根据此错误消息,它正在寻找一个不存在的无参数默认构造函数。我自动装配了构造函数并专门将“required”设置为true,因此注入器应该选择此构造函数。由于bean是请求范围,因此这应该有效,但事实并非如此。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

据我了解,您将无法使用标准方法自动装配HttpServletResponse对象。检查WebApplicationContextUtils类的registerWebApplicationScopes方法。可解析的依赖项只是HttpSession.class和HttpSession.class。

检查cusom解决方案here

答案 1 :(得分:3)

正如@Aravind所提到的,HttpServletResponse不能作为自动候选候选者使用。但是,您可以使用ServletWebRequest.getResponse()访问回复,ServletWebRequesta Spring-specific class 可用作自动线候选。

话虽如此,它可能在构造函数中不起作用,但无论如何都要试一试:)