2012-03-28 19 views
5

पर लक्ष्य पारित करना मैं प्रोसेसर इंटरफेस को लागू करने वाले वर्गों द्वारा फेंकने वाले अपवादों को पकड़ना चाहता हूं। पहलू में मुझे प्रोसेसर तक पहुंच की आवश्यकता है, जो अपवाद फेंकता है।स्प्रिंग एओपी:

@Pointcut("target(some.package.Processor) && args(message)") 
    public void processor(Message message) { 
} 

और पहलू:

Caused by: java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut 
    at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:301) ~[aspectjweaver-1.6.12.jar:1.6.12] 
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:207) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:193) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.checkReadyToMatch(AspectJExpressionPointcut.java:182) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:163) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:209) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:263) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:295) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:117) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:87) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:68) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:359) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:322) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:407) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1461) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE] 
    ... 58 common frames omitted 

पहलू को लक्ष्य वस्तु बंधन का सही तरीका क्या है:

@AfterThrowing(pointcut="processor(message)", throwing="ex") 
public void onExceptionInProcessor(Processor target, Exception ex, Message message) { 
    // code skipped 
} 

हालांकि, मैं अपवाद निम्न हो रहा pointcut निम्नलिखित को परिभाषित? एक ही रास्ता मैं पाया है बाध्यकारी JoinPoint है, लेकिन यह निम्न का सुझाव:

जब तक आप विशेष रूप से इस चिंतनशील पहुंच की आवश्यकता है, तो आप लक्ष्य pointcut डेसिग्नेटर इस वस्तु पर बेहतर स्थिर टाइपिंग के लिए इस्तेमाल करना चाहिए पाने के लिए और प्रदर्शन

क्या कोई यह कैसे करता है?

उत्तर

7

आपका target विधि में पैरामीटर नामों में से एक को संदर्भित करना चाहिए। उदाहरण कह

@Pointcut("target(myProc) && args(message)") 
public void processor(Processor myProc, Message message) { 
} 

आप myProc चर में प्रकार सुरक्षित तरीका में Processor दे देंगे के लिए।

+0

धन्यवाद, यह काम करता है! – kazaand

+0

कोई समस्या नहीं है। अप-वोट अच्छा होगा। – vertti

+0

लक्ष्य (x) जैसा लगता है कि एनोटेशन में पहले निर्दिष्ट होना आवश्यक है, हालांकि तर्कों में जरूरी नहीं है –

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