我有一个请求范围的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是请求范围,因此这应该有效,但事实并非如此。
有什么想法吗?
答案 0 :(得分:3)
据我了解,您将无法使用标准方法自动装配HttpServletResponse对象。检查WebApplicationContextUtils类的registerWebApplicationScopes方法。可解析的依赖项只是HttpSession.class和HttpSession.class。
检查cusom解决方案here。
答案 1 :(得分:3)
正如@Aravind所提到的,HttpServletResponse
不能作为自动候选候选者使用。但是,您可以使用ServletWebRequest.getResponse()
访问回复,ServletWebRequest
(a Spring-specific class) 可用作自动线候选。
话虽如此,它可能在构造函数中不起作用,但无论如何都要试一试:)