2012-03-12 12 views
6

सक्षम यह वह जगह है इस सवाल से पर निम्नलिखित:स्प्रिंग AOP या AspectJ

Spring autowired bean for @Aspect aspect is null

मेरे प्रारंभिक समझ है कि जब वसंत AOP का उपयोग कर, @Aspect साथ एनोटेट वर्गों वसंत कामयाब सेम के रूप में बनाई गई हैं रहा था, इसलिए निर्भरता इंजेक्शन सामान्य के रूप में काम करेंगे। हालांकि ऐसा लगता है कि @Aspect एनोटेशन के साथ एक वस्तु वसंत कंटेनर के बाहर एक सिंगलटन के रूप में बनाया जाता है, इसलिए मुझे क्रम में यह सक्षम करने के लिए तो जैसे XML में ठीक से कॉन्फ़िगर करने के लिए होने के रूप में एक स्प्रिंग कामयाब सेम:

<bean id="aspect" class="com.mysite.aspect" factory-method="aspectOf" /> 

यह अब मुझे पूरी तरह उलझन में डाल दिया है। मैंने सोचा था कि निम्नलिखित विन्यास वसंत AOP का प्रयोग करेंगे:

<context:component-scan base-package="com.mysite.aspectPackage"/> 
<aop:aspectj-autoproxy/> 

तो यह पहलू सेम बनाने घटक स्कैन का उपयोग कर @Aspect एनोटेशन के लिए स्कैन होगा, और फिर autoproxy एक beanPostProcessor जो उचित के साथ मेरे संदर्भ में सभी सेम प्रॉक्सी पैदा करेगा सलाह। मैंने फिर पहलू को सक्षम करने के लिए सोचा था कि मुझे एक पूरी तरह से अलग एक्सएमएल कॉन्फ़िगरेशन की आवश्यकता होगी (जो संयोग से मुझे प्रलेखन में एक उदाहरण नहीं मिल रहा है)। यह इस विन्यास पहलुओं है कि मेरे कंटेनर या जो काम के बाहर होगा बाईटकोड जोड़ तोड़ के बजाय प्रॉक्सी करके बनाने के लिए AspectJ का उपयोग करता है किया जाएगा।

नोट
यह वसंत AOP और पहलू जम्मू के बीच अंतर पर एक प्रश्न, यह अच्छी तरह से यहाँ व्यक्त कर रहा है नहीं है:

Spring AOP vs AspectJ

उत्तर

5

@Component 2 उदाहरणों, स्प्रिंग कंटेनर के अंदर एक, AspectJ कंटेनर के अंदर बना दिया जाएगा कोशिश कर सकते हैं।

उपयोग @Configurable जब AspectJ कंटेनर द्वारा instantiated वसंत अपनी कक्षा के लिए निर्भरता इंजेक्शन आदि से प्रबंध कर सकें।

@Aspect कि वसंत-aop, जहां क्रम बुनाई को संभालने के लिए प्रयोग किया जाता है के द्वारा समर्थित है एक AspectJ शैली एनोटेशन है अवरोधन आदि

संकलन समय बुनाई आप के रूप में pointcuts में मौजूद रहेंगे उपयोग उपेक्षा करने की अनुमति देता बाईटकोड, इस AspectJ संकलक के माध्यम से किया जाता है (mvn एकीकरण के लिए http://mojo.codehaus.org/aspectj-maven-plugin/ देखें)।

आप का उपयोग करें AspectJ संकलक या वसंत-aop कोई फर्क नहीं पड़ता है, यह अभ्यस्त अपने पहलू जिस तरह से आप चाहते हैं जब तक आप कारखाना/विन्यास का उपयोग में एक प्रबंधित सेम के रूप में बना सकते हैं।

AspectJ विन्यास सख्ती से, pointcut परिभाषाओं आदि है कि अपने वर्ग के भीतर उपस्थित रहेंगे, है।

+0

मैंने वसंत 4.3 के साथ यह कोशिश की और '@ पहलू' @ घटक के साथ एनोटेटिंग पहलू DI के साथ भी पूरी तरह से ठीक काम करता है, जैसा कि @ बोझो ने अपने उत्तर में लिखा था – csharpfolk

8

@Aspect एक वसंत एनोटेशन नहीं है, और यह नहीं है घटक-स्कैन द्वारा पता चला। तो आपको किसी वसंत बीन के रूप में इसे किसी भी तरह पंजीकृत करना होगा। aspectOf समाधान काम करता है। तुम भी

@Aspect 
@Component 
+0

तो एक पहलू कॉन्फ़िगरेशन और वसंत एओपी कॉन्फ़िगरेशन के बीच क्या अंतर है? – mogronalol

+1

यह काम करता है? मुझे लगता है कि अगर मैं इस वसंत को कक्षा के दो उदाहरण बनाता हूं और पहलू के रूप में उपयोग किए जाने वाले व्यक्ति की निर्भरता इंजेक्शन नहीं होती है। –

-1

उपयोग

  • @Aspect
  • @Configurable

इसके अलावा जोड़ें "< संदर्भ: वसंत-विन्यस्त />" आपके XML विन्यास फाइल में।