2009-09-07 13 views
5

के साथ एनोटेटेड कक्षा का पता नहीं लगा रहा है मुझे अपने मुख्य प्रोजेक्ट में @configurable के साथ एनोटेटेड कक्षा पर लोड टाइम बुनाई करने के लिए AspectJ प्राप्त करने में समस्या हो रही है। कोई फ़ील्ड सेट नहीं होता है और कोई भी सेटर्स छुआ नहीं जाता है।स्प्रिंग लोड टाइम बुनाई @configurable

मुझे नहीं लगता कि कॉन्फ़िगरेशन के साथ समस्या है, क्योंकि मैंने कॉन्फ़िगरेशन निकाला है और इसे एक छोटे सैंडबॉक्स प्रोजेक्ट पर परीक्षण किया है। बस इसके लिए, मैं इसे इस प्रश्न में शामिल कर दूंगा।

तो, मैं सोच रहा हूँ:

  1. वहाँ बड़ी परियोजना है कि इस विशेष वर्ग का पता लगाने से स्प्रिंग/AspectJ निरोधक किया जा सकता है में कुछ भी है?
  2. क्या जांच करने का कोई तरीका है कि क्या वसंत प्रश्नों में कक्षा के बारे में भी जागरूक है?

और अंत में, जो कुछ कोड मैं निकाल सकते हैं (कहानियो के लिए क्षमा करें):

विन्यास एक्सएमएल से:

<context:annotation-config /> 
<context:spring-configured /> 
<context:component-scan base-package="se.isydev" /> 
<context:component-scan base-package="se.istools" /> 
<aop:aspectj-autoproxy /> 
<context:load-time-weaver aspectj-weaving="on" /> 
<context:property-placeholder location="classpath:settings.properties" /> 
(...) 
<bean class="com.company.ClassToBeWeaved" 
    scope="prototype">  
    <property name="injectedBean" ref="injectedBean" /> 
</bean> 

और वर्ग ही:

@Configurable 
public class ClassToBeWeaved { 
    private InjectedBean injectedBean; 

    @Required 
    public void setInjectedBean() { ... } 
} 

संपादित करें :

अच्छा, पता चला है कि यह एक परिपत्र निर्भरता के कारण काम नहीं कर रहा था। ओह मुझे डर, मुझे विरासत कोड पर काम करना अच्छा लगता है। फिर भी, मेरे मूल प्रश्न बने रहे हैं।

+0

साथ स्प्रिंग एकीकृत करने के लिए क्या पर्यावरण आप इस अभियान चला रहे हैं पर

अधिक जानकारी? एलटीडब्ल्यू केवल कुछ ऐप सर्वर पर काम करता है। – skaffman

+0

मैंने ग्रहण में अपना सैंडबॉक्स सही चलाया और उचित ऐप जेबॉस – mikek

+0

पर चल रहे एक युद्ध में है, जेबॉस का कौन सा संस्करण आप चल रहे हैं और इसके लिए जावा स्टार्टअप कमांड लाइन क्या है? यदि जेबॉस 5.x या उच्चतर है तो आपको किसी विशिष्ट एजेंट की आवश्यकता नहीं है (और यह आपके सैंडबॉक्स के साथ एक अंतर है, जहां आपको एजेंट निर्दिष्ट करना होगा)। –

उत्तर

0

आप संभवतः "weave" भूल गए हैं। अपनी कमन लाइन में -javaagent:path/to/aspectjweaver.jar या -javaagent:path/to/spring-agent.jar जोड़ें।

मैं यह भी सुझाव देता हूं कि @Autowire आपकी निर्भरता स्पष्ट रूप से इंजेक्ट करने के बजाय।

+0

नहीं, या तो नहीं। -जवाजेंट: (...)/वसंत-एजेंट-2.5.6.jar "मेरी कमांड लाइन पर है। – mikek

0

मेरा मानना ​​है कि एलटीडब्लूडब्ल्यू को आपके क्लासपाथ पर मेटा-आईएनएफ/एओपी.एक्सएमएल की आवश्यकता है।

<aspectj> 
    <!-- 
     Uncomment this is you need AOP logging <weaver options="-verbose 
     -showWeaveInfo 
     -XmessageHandlerClass:org.springframework.aop.aspectj.AspectJWeaverMessageHandler"> 
    --> 
    <weaver> 
     <include within="com.xxx.MyClass" /> 
    </weaver> 
    <aspects> 
     <aspect name="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"/> 
     <include within="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"/> 
    </aspects> 
</aspectj> 
+0

आह नोप, इसकी आवश्यकता नहीं है। जैसा कि मैंने कहा, यह मेरे सैंडबॉक्स में बेवकूफ काम करता है। – mikek

0

आप और अधिक तो 1 वसंत एक्सएमएल फ़ाइल है: यह की तरह दिखना चाहिए? मेरा मानना ​​है कि मुझे कोई समस्या थी < एओपी: पहलू-ऑटोप्रोक्सी /> मेरी एक्सएमएल फाइलों के 'सबसे अभिभावक' में नहीं था।

+0

मेरा संपादन देखें त्रुटि कोड में एक परिपत्र निर्भरता के कारण थी (मेरा नहीं)। – mikek

0

आपके प्रश्न के लिए कुछ संकेत।

वसंत के साथ लोड समय बुनाई काम करे, इसके लिए न केवल आप ठीक ढंग से कॉन्फ़िगर करने के लिए aop.xml जरूरत है, लेकिन आप भी जरूरत वसंत-instrument.jar & वसंत-aspects.jar है।

ये जार फ़ाइलों में अपना एओपी होता है।एक्सएमएल कि वसंत पहलुओं की घोषणा को संभालने के लिए:

  • @Transactional समर्थन
  • @Configurable समर्थन
  • जेपीए अपवाद अनुवाद समर्थन
  • @Async शेड्यूलिंग समर्थन के लिए एनोटेशन

पृष्ठभूमि में क्या होता है?

AspectJ लोड समय बुनाई का उपयोग कर, @Transactional और @Configurable कार्यान्वयन JDK प्रॉक्सी या CGLIB प्रॉक्सी लेकिन असली AspectJ पहलुओं के आधार पर नहीं रह रहे हैं।

इन वास्तविक पहलुओं को सक्षम करने के लिए, आपको अतिरिक्त जार फ़ाइलों की आवश्यकता है। जार भी अपने स्वयं के aop.xml में इन पहलुओं की घोषणा होते हैं कैसे AspectJ here

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