2011-09-03 13 views
5

मेरे पास एक स्प्रिंग हैंडलर इंटरसेप्टर है जो मेरे एप्लिकेशन (/ ऐप/*) में फ्रंटएंड यूआरएल को रोकता है। मैं यह निर्धारित करना चाहता हूं कि हैंडलर में कौन सी एक्शन विधि हैडलर इंटरसेप्टर के भीतर से लागू की जा रही है। क्या इसे देखने का कोई तरीका है, क्या मुझे इंटरसेप्टर में कुछ इंजेक्ट करने की ज़रूरत है जो अनुरोधित पथ के आधार पर इसे देख सके? (क्योंकि मैं जानता हूँ कि आप से पूछना जाएगा!)स्प्रिंग हैंडलर इंटरसेप्टर से हैंडलर पर जिस विधि को बुलाया जा रहा है, मैं उसे कैसे देख सकता हूं?

<mvc:interceptors> 
    <bean class="com.example.web.interceptors.PageCacheInterceptor" /> 
</mvc:interceptors> 

पृष्ठभूमि:

इंटरसेप्टर इस तरह है:

public class PageCacheInterceptor implements HandlerInterceptor {...} 

यह इस तरह मैप किया गया है। मैं अपने ऐप में सरल पेज कैशिंग जोड़ रहा हूं और कंट्रोलर में प्रत्येक उपयुक्त विधि पर @ कैशेबल जैसे एनोटेशन का उपयोग करना चाहता हूं। इंटरसेप्टर तब निर्धारित कर सकता है कि इसे बनाए गए क्रिया के आधार पर प्रतिक्रिया कैश करना है या नहीं।

उदाहरण के लिए:

@RequestMapping(value = "", method = RequestMethod.GET) 
@Cacheable(events={Events.NEW_ORDER,Events.NEW_STAT}) 
public String home(Model model) {...} 

घटनाओं जो कि कारण कैश अवैध हो रहे हैं। उदाहरण के लिए/विजेट/सूची कार्रवाई में सहेजा जा रहा एक नया विजेट द्वारा कैश की गई प्रतिक्रिया को अमान्य कर दिया जाएगा।

संपादित करें: मैंने नवीनतम स्प्रिंग 3.1 एम 2 में अपग्रेड किया है, this blog post मुझे आवश्यक सुविधाओं पर संकेत दिया गया है, लेकिन यह स्पष्ट नहीं है कि इन नए वर्गों या उप-वर्गीकरण को इंजेक्शन देने की आवश्यकता होगी या नहीं। क्या किसी ने उन्हें इंटरसेप्टर में हैंडलर मोड को पुनर्प्राप्त करने के लिए उपयोग किया है?

+1

ठीक है, मैं इस समझ में मदद करता है:

तो फिर तुम बात की इस तरह कर सकते हैं। हालांकि ... '100 से कम प्रतिष्ठा वाले उपयोगकर्ता 8 घंटे के लिए अपने स्वयं के प्रश्न का उत्तर नहीं दे सकते हैं' - तो यदि आप समाधान के लिए प्रतीक्षा कर रहे अपने सीट के किनारे पर हैं, तो तंग रहें ... –

उत्तर

7

ठीक है तो समाधान वास्तव में बहुत आसान था:

1) वसंत में अपग्रेड 3,1

2) RTFM (ठीक से)

उदाहरण के लिए एक HandlerInterceptor को वस्तु से हैंडलर डाल सकता हैंडलर मोड और लक्ष्य नियंत्रक विधि तक पहुंच प्राप्त करें, इसकी एनोटेशन, आदि

3) हैंडल कास्ट करें इंटरसेप्टर में हैंडलर मोड में आर ऑब्जेक्ट। ,

HandlerMethod method = (HandlerMethod) handler; 
    Cacheable methodAnnotation = method.getMethodAnnotation(Cacheable.class); 
    if (methodAnnotation != null) { 
     System.out.println("cacheable request"); 
    } 
0
@Override 
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
System.out.println("Pre-handle"); 
HandlerMethod hm=(HandlerMethod)handler; 
Method method=hm.getMethod(); if(method.getDeclaringClass().isAnnotationPresent(Controller.class)){ 
if(method.isAnnotationPresent(ApplicationAudit.class)) 
{ 
System.out.println(method.getAnnotation(ApplicationAudit.class).value()); 
request.setAttribute("STARTTIME",System.currentTimemillis()); 
} 
} 
return true; 
} 

इस पोस्ट में अधिक जानकारी के है उम्मीद है कि इस http://www.myjavarecipes.com/spring-profilingaudit-using-mvc-filters/

संबंधित मुद्दे

 संबंधित मुद्दे