복붙노트

[SPRING] @Autowired HttpServletResponse

SPRING

@Autowired HttpServletResponse

나는 HttpServletResponse를 autowire하는 방법을 찾고있다. 그것은 상자 밖으로 봄과 함께 작동하지 않지만,이 설명을 발견했습니다. 이것은 효과적이지만 일종의 성가신 일입니다. 봄에는 분명히 객체가 범위를 요청하도록하는 메커니즘이 있습니다 (즉, HttpServletRequest). 이것은 해킹 된 것으로 보입니다.

Spring이 HttpServletRequest에 사용하는 것과 동일한 메커니즘에 연결하는 방법이 있습니까? 그리고 스프링 팀이 왜 HttpServletRequest autowire 만 가능하게하고 HttpServletResponse를 제외 시키기로 결정했는지에 대한 아이디어가 있습니까?

해결법

  1. ==============================

    1.아마도 몇 가지 해결 방법이있을 수 있지만, 그것이 의미하는 방식이 아니기 때문에 그다지 명백하지 않습니다. Spring MVC는 요청과 응답을 인수로 취하는 @RequestMapping 메소드를 제공하는 싱글 톤 @Controller 빈을 갖기위한 것이다.

    아마도 몇 가지 해결 방법이있을 수 있지만, 그것이 의미하는 방식이 아니기 때문에 그다지 명백하지 않습니다. Spring MVC는 요청과 응답을 인수로 취하는 @RequestMapping 메소드를 제공하는 싱글 톤 @Controller 빈을 갖기위한 것이다.

    다른 장소 (서비스 계층)에서 응답이 필요한 경우 -하지 마십시오. 응답은 웹 (컨트롤러) 계층을 넘어서는 안됩니다.

    응답을 보내려면 다음이 필요합니다. - ThreadLocal에 응답을 저장합니다. - 현재 응답을 리턴하는 factory bean을 만드는 것

    당신이 보여준 예제 코드에 대해 - 현재 응답을 반환하는 프록시 (HttpServletResponse 구현)를 반환하기 위해 factory bean이 필요하지 않은지 확실하지 않습니다. 그리고 그것은 다소 복잡해집니다.

    하지만 궁극적으로 - 그렇게해서는 안됩니다. 여러 컨트롤러 호출을 인터셉트해야하는 경우 mvc- 인터셉터를 사용하십시오. 애스펙트를 실제로 사용해야하는 경우, 인터셉트 된 메소드에 인수로 전달되면 응답을 얻을 수 있습니다.

  2. ==============================

    2.메소드 핸들에 요청을 포함시킬 수 있습니까?

    메소드 핸들에 요청을 포함시킬 수 있습니까?

    @RequestMapping(method=Method.GET, value="myUrl")
    public String doGet(HttpServletResponse response){//spring will put the response in for you
      ... 
    }
    
  3. from https://stackoverflow.com/questions/6984054/autowired-httpservletresponse by cc-by-sa and MIT license