2015-01-13 6 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

첫째, 나는 자원 요청이 org.springframework.web.servlet.resource.ResourceHttpRequestHandler에 의해 처리되고있는 화면 클래스

public class ResAudience { 

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

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

있습니다. 따라서 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> 

나는 그런 ResourceHttpRequestHandler#setLocations(List locations) 등의 요청에 따라 AOP를 통해 위치를 다시 쓰기,하지만 보이지 않는 곳의 유일한 기능은 응용 프로그램 수명주기가 ResourceHttpRequestHandler#handleRequest(HttpServletRequest request, HttpServletResponse response)입니다 동안 호출되는에 holping했다 위치를 다시 쓰는 기회를 갖기.

내가 누락 된 것이 있어야합니다. 누군가가 런타임 중에 위치를 다시 쓰는 방법을 찾도록 도와 줄 수 있습니까? (AOP를 사용할 필요는 없습니다)? 미리 감사드립니다.

답변