2012-11-20 128 views
1

請求或會話對象我知道如何在Java代碼自動裝配一個HTTP請求對象:GET HTTP春季XML

@Resource 
private HttpServletRequest request; 

我想要做的XML的conf類似的東西。我試圖實例化的bean需要一個HTTP會話對象的構造函數參數:

<bean class="..." scope="request"> 
     <constructor-arg> 
      ??? 
     </constructor-arg> 
    </bean> 

回答

1

你可以創建一個使用此方法的工廠類:

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/context/request/RequestContextHolder.html#currentRequestAttributes%28%29

如:

<bean id="httpSessionFactory" class="HttpSessionFactory"> 
    <constructor-arg>true</constructor-arg> 
</bean> 

<bean class="..." scope="request"> 
    <constructor-arg> 
     <bean factory-bean="httpSessionFactory" 
       factory-method="getSession"/> 
    </constructor-arg> 
</bean> 

和Java:

public class HttpSessionFactory { 
    private boolean create; 

    public HttpSessionFactory(boolean create) { 
     this.create = create; 
    } 

    public static HttpSession getSession() { 
     ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); 
     return attr.getRequest().getSession(create); 
    } 
} 
+1

有沒有辦法直接從xml引用HttpServletRequest對象?畢竟,它可以用Java自動裝配。 –

+0

不是我所知。您可以將上面的代碼封裝到Spring命名空間中,以便您有一個標籤解析爲當前會話。但我不知道另一種方式。通常你不應該/不需要直接訪問這些對象,並讓Spring管理bean/scopes。 –