3

我有一个请求范围的 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.()

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

有任何想法吗?

4

2 回答 2

3

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

在此处检查自定义解决方案。

于 2012-01-17T05:54:30.100 回答
3

正如@Aravind 提到HttpServletResponse的,不能作为自动装配候选者。但是,您可以使用 访问响应ServletWebRequest.getResponse(),并且ServletWebRequest特定于 Spring 的类可用作自动装配候选者。

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

于 2012-01-17T08:01:39.433 回答