2011-10-18 16 views
7

मैं एक पहलू यह है कि मैं वर्णन करने के लिए मुश्किल लगता है बनाते हैं, तो मेरे विचारों का कहना है यह बताने के लिए की जरूरत के साथ वसंत AOP pointcut:एक निश्चित तर्क

  • कॉम के पैकेज (या किसी भी सबपैकेज) के भीतर किसी भी विधि। xy ..
  • एक विधि तर्क एक अंतरफलक के एक कार्यान्वयन है javax.portlet.PortletRequest
  • वहाँ हो सकता है मुझे विधि में अधिक तर्क
  • वे किसी भी क्रम में हो सकता है

मैं एक pointcut और एक "के आसपास"

वर्तमान में दिए गए PortletRequest साथ सलाह की जरूरत है मैं श्रीमती है जैसे:

@Pointcut("execution(* com.x.y..*.*(PortletRequest,..)) && args(request,..)") 
public void thePointcut(PortletRequest request) { 
} 


@Around("thePointcut(request)") 
    public Object theAdvice(ProceedingJoinPoint joinPoint, PortletRequest request) { 
... 

और कोई त्रुटि प्राप्त:

ERROR 10:47:27.159 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] o.s.web.portlet.DispatcherPortlet - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet. mvc.HttpRequestHandlerAdapter': Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: w arning no match for this type name: PortletRequest [Xlint:invalidAbsoluteTypeName]

किसी भी मदद की सराहना की अत्यधिक

दयालु संबंध, दान

अद्यतन विधि मैं रोकना कोशिश कर रहा हूँ है:

में

सार्वजनिक वर्ग com.xyMainClass:

public String mainRender(Model model, RenderRequest request) throws SystemException

सार्वजनिक कक्षा में com.xyasd.HelpClass :

public final void helpAction(ActionRequest request, ActionResponse response, Model model)

cource के, मैं उस तर्क को प्राप्त करना चाहता हूं जो PortletRequest लागू करता है, जो कि पहली विधि से RenderRequest है, और दूसरे से ActionRequest है।

सादर, दान

उत्तर

8

त्रुटि से पता चलता है कि आप बिंदु कटौती अभिव्यक्ति में PortletRequest की पूरी तरह से योग्य नाम का उपयोग करने की जरूरत है - के बाद से यह एक स्ट्रिंग के मूल्यांकन के समय के दौरान आयात संदर्भ उपलब्ध नहीं है भाव।

@Pointcut("execution(* com.x.y..*.*(javax.portlet.PortletRequest.PortletRequest,..)) && args(request,..)") 
public void thePointcut(PortletRequest request) { 
} 

के बाद से आप पहले से ही निर्माण आपको लगता है कि जरूरत नहीं है हस्ताक्षर में आर्ग में प्रकार का चयन कर रहे हैं। निम्नलिखित भी काम करना चाहिए।

@Pointcut("execution(* com.x.y..*.*(..)) && args(request,..)") 
public void thePointcut(PortletRequest request) { 
} 

यह एक और बूलियन आपरेशन है - यानी, यह रूप में अच्छी तरह आर्ग निर्माण के रूप में विधि पैटर्न से मेल खाना चाहिए।

+0

मुझे अब त्रुटि नहीं मिलती है, लेकिन पॉइंटकट विधि को पकड़ नहीं लेता है। अधिक ठोस होने के लिए, कृपया ऊपर अपडेट की गई पोस्ट की जांच करें। – Queequeg

+1

दोनों विधियों या केवल मुख्य रेंडर विधि। जिस तरह से आपने बिंदु को परिभाषित किया है, वह केवल उन तरीकों से मेल खाएगा जहां पहला पैरामीटर PortletRequest है। आप तर्क (.., अनुरोध, ..) जैसे कुछ कोशिश कर सकते हैं - सुनिश्चित नहीं है कि यह काम करेगा या नहीं।आप तर्कों को फिर से व्यवस्थित कर सकते हैं ताकि PortletRequest को पहले तर्क के रूप में रखा जा सके। – gkamal

+0

मैं पैरामीटर के बीच PortletRequest के साथ किसी भी विधि को पकड़ना चाहता हूं, और उस अनुरोध तक पहुंच है। – Queequeg

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