2015-01-13 104 views
0

我需要像<mvc:resources mapping="/id1/resources/**" location="/id1/resources/static" />,<mvc:resources mapping="/id2/resources/**" location="/id2/resources/static" />這樣的資源映射爲每個產品(每個產品都可以有自己的靜態css,javascript ...)。由於產品將在運行時創建,因此我不能簡單地對每個資源映射聲明進行硬編碼。所以我能想到的方法是使用AOP爲每個資源請求重寫資源位置。ResourceHttpRequestHandler上的Spring AOP

首先,我得看點類

public class ResAudience { 

    public void anyMethodBefore() { 
     System.out.println("any method before ..."); 
    } 

    public void anyMethodAfter() { 
     System.out.println("any method return ..."); 
    } 
} 

我發現資源請求被org.springframework.web.servlet.resource.ResourceHttpRequestHandler處理。所以AOP配置

<aop:config> 
    <aop:aspect ref="resAspect"> 
     <aop:pointcut id="resHandler" expression="execution(* org.springframework.web.servlet.resource.ResourceHttpRequestHandler..*(..))" /> 
     <aop:before pointcut-ref="resHandler" method="anyMethodBefore"/> 
     <aop:after pointcut-ref="resHandler" method="anyMethodAfter"/> 
    </aop:aspect> 
</aop:config> 

我holping基於該請求,如ResourceHttpRequestHandler#setLocations(List locations)通過AOP重新編寫的位置,但被調用的唯一功能在應用程序生命週期是ResourceHttpRequestHandler#handleRequest(HttpServletRequest request, HttpServletResponse response),我好像在那裏不有機會重新寫入位置。

我相信肯定會有一些我想念的東西。有人會幫助找到在運行期間重寫該位置的方式(不需要使用AOP)嗎?提前致謝。

回答