2012-01-16 2 views
3

У меня есть объект с привязкой к запросу, и мне нужно иметь доступ к объектам HttpServletResponse и HttpServletRequest.Как создать конструктор-autowire HttpServletResponse весной 3.1?

Мне нужен доступ к этим объектам в конструкторе, поэтому автоустановка свойств не является вариантом.

я сделал следующее:

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

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

     // do stuff I need to do in the constructor 

    } 
} 

Это дает мне следующее сообщение об ошибке:

No default constructor found; nested exception is java.lang.NoSuchMethodException: com.foo.bar.MyClass.()

В соответствии с этим сообщением об ошибке, он ищет конструктор paramless по умолчанию, который не существует. Я автоувеличил конструктор и специально установил «required» в true, поэтому инжектор должен выбрать этот конструктор. Поскольку bean - область запроса, это должно работать, но это не так.

Любые идеи?

ответ

3

Насколько я понимаю, вы не сможете авторизовать объект HttpServletResponse, используя стандартный подход. Проверьте метод registerWebApplicationScopes класса WebApplicationContextUtils. Разрешимыми зависимостями являются только классы HttpSession.class и HttpSession.class.

Проверьте решение cusom here.

+0

Спасибо. Обычное решение кажется немного хакерским, поэтому я переписал свою логику, чтобы поместить функцию bean в HandlerInterceptor, где по умолчанию эти 2 объекта доступны по умолчанию. – GeorgeStone

+0

И если я делаю портлет, то PortletRequest доступен для autowiring? – rascio

3

Как указано в @Aravind, HttpServletResponse не доступен в качестве кандидата на автоувеличивание. Тем не менее, вы можете получить доступ к ответу с использованием ServletWebRequest.getResponse(), а ServletWebRequest (a Spring-specific class) -, доступный как кандидат на автоукрепление.

Сказав это, это может не сработать в конструкторе, но все равно отдать ему :)

+1

Просто попробовал это. Когда вы autowire 'ServletWebRequest',' WebApplicationContextUtils.WebRequestObjectFactory.getObject() 'строит его и, к сожалению, не устанавливает объект ответа. – yclian

Смежные вопросы