2010-08-18 3 views
0
나는 그것이 저장되도록 스프링 빈을 만들 필요가

serverName, serverPort, 내가 필요로 내가 다른 콩이 콩을 주입 할 수 있도록 HttpServletRequest의 객체의 contextPath 속성.는 스프링 빈을 만들기 ServletRequest의 속성을 보유하고

내 의견으로는, 이러한 속성은 어떤 URI와도 변경되지 않으므로 한 번 초기화해야합니다 (어쨌든 request 인스턴스를 여러 번 전달하는 것은 너무 비싸지 않습니다).

문제점은 구성 빈에 HttpServletRequest 인스턴스를 어떻게 삽입 할 수 있습니까? 나는 XML 기반의 주입을 선호한다. 대부분 <property>으로 삽입해야하지만이 개체의 경우 name 또는 ref이 무엇인지 알 수 없습니다.

목표는 그들이 어떤 콩에서 액세스 할 수 있습니다 내가 serverName

를 얻을 필요로 할 때 내가 인수로 많은 방법에 request 개체를 전달할 필요가 없습니다 있도록 빈에서 그 변수를 유지하는 것입니다

그런 bean과 그 설정을 만드는 방법에 대한 아이디어가 있습니까?

+3

나는 이것이 나쁜 생각이라고 생각한다. 웹 계층 외부의 계층에서 이러한 정보를 알아야하는 이유는 무엇입니까? 웹 정보가 앱의 나머지 부분에 누출되는 것처럼 느껴집니다. – duffymo

+0

흠, 옳을 수도 있습니다. –

답변

3

당신이이 request-scoped bean를 사용하고 콩에 현재 요청을 autowiring에 수행 할 수 있습니다 XML에서 다음

public class RequestHolder { 
    private @Autowired HttpServletRequest request; 

    public String getServerName() { 
     return request.getServerName(); 
    } 
} 

그리고 :

<bean id="requestHolder" class="com.x.RequestHolder" scope="request"> 
    <aop:scoped-proxy/> 
</bean> 

그런 다음 wheiever에 requestHolder 빈을 연결할 수 있습니다 비즈니스 로직 빈.

참고 - 요청 범위의 빈을 단일 토폴로지에 주입하는 가장 쉬운 방법입니다.이 작동 원리는 Spring docs을 참조하고 aop 네임 스페이스를 구성하는 방법을 참조하십시오.

+0

고마워요! 마술처럼 일했습니다. –

관련 문제