2010-12-09 10 views
6

मैंने वसंत के साथ AspectJ को कॉन्फ़िगर किया है और कक्षा से बाहर बुलाए जाने वाले सार्वजनिक तरीकों को "पकड़ने" के दौरान यह ठीक काम करता है। अब मैं ऐसा कुछ करना चाहता हूं:Aspectj और निजी या आंतरिक तरीकों को पकड़ना

public class SomeLogic(){ 

    public boolean someMethod(boolean test){ 

     if(test){ 
     return innerA(); 
     } else { 
     return innerB(); 
     } 
    } 


    private boolean innerA() {// some logic} 
    private boolean innerA() {// some other logic} 

} 

कुछ लॉजिक एक स्प्रिंगबीन है। आंतरिक ए() और आंतरिक बी() को विधियों को निजी या सार्वजनिक घोषित किया जा सकता है - विधि कुछ विधि() को स्ट्रेट्स एक्शन से बुलाया जाता है। क्या AspectJ के तरीकों को आंतरिक ए() या innerB() से कुछ तरीकों से पकड़ना संभव है?

मेरे config (XML आधारित):

<aop:aspect id="innerAAspect" ref="INNER_A"> 
     <aop:pointcut id="innerAService" expression="execution(* some.package.SomeLogic.innerA(..))"/> 
    </aop:aspect> 

    <aop:aspect id="innerAAround" ref="INNER_A"> 
     <aop:around pointcut-ref="innerAService" method="proceed"/> 
    </aop:aspect> 


    <aop:aspect id="innerBAspect" ref="INNER_B"> 
     <aop:pointcut id="innerBService" expression="execution(* some.package.SomeLogic.innerB(..))"/> 
    </aop:aspect> 

    <aop:aspect id="innerBAround" ref="INNER_B"> 
     <aop:around pointcut-ref="innerBService" method="proceed"/> 
    </aop:aspect> 
+0

हमें बताएं कि आपके AspectJ अभिव्यक्तियों के लिए आपके पास क्या है। मुझे पहले सार्वजनिक बनाम निजी के साथ कोई समस्या नहीं थी। –

+0

क्या आप एक उदाहरण पोस्ट कर सकते हैं? – awonline

उत्तर

5

हाँ, यह AspectJ के साथ निजी तरीकों को पकड़ने के लिए आसान है।

एक उदाहरण है कि सभी निजी तरीकों से पहले एक वाक्य प्रिंट:

@Pointcut("execution(private * *(..))") 
public void anyPrivateMethod() {} 

@Before("anyPrivateMethod()") 
public void beforePrivateMethod(JoinPoint jp) { 
    System.out.println("Before a private method..."); 
} 

आप ग्रहण के साथ परिचित हैं, तो मैं STS साथ AspectJ विकसित करने के लिए या केवल AJDT plugin स्थापित सलाह देते हैं।

वसंत एओपी क्षमताओं के बारे में अधिक जानकारी वसंत संदर्भ दस्तावेज here में पाया जा सकता है।

+0

धन्यवाद, यह ठीक काम करता है। मुझे लगता है कि समस्या वसंत विन्यास के साथ है कि सार्वजनिक तरीकों को "पकड़ लिया", और निजी या आंतरिक बीन्स से बुलाया जाता है। – awonline

+2

यह है। स्प्रिंग एओपी या तो प्रॉक्सी ऑब्जेक्ट्स या सीजीएलआईबी का उपयोग करता है और इनमें से कोई भी विकल्प इसका समर्थन नहीं करता है। यही कारण है कि वसंत पहलुओं AspectJ का भी समर्थन करता है। – Espen

+0

तो क्या यह संभव है या नहीं? (Aspectj + वसंत + निजी तरीकों को पकड़ना) – awonline

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