मैं इंजेक्शन की आवश्यकता वाले क्षेत्रों पर स्प्रिंग के @ कॉन्फिगर करने योग्य एनोटेशन डब्ल्यू/@ रिसोर्स के माध्यम से स्वत: निर्भरता इंजेक्शन का उपयोग करने की कोशिश कर रहा हूं। इसमें कुछ सेटअप शामिल थे, जैसे वसंत-एजेंट.जर को मेरे जेवीएम में पास करना। पूर्ण विवरण see here के लिए।स्प्रिंग का @ कॉन्फिगर करने योग्य कभी-कभी काम क्यों करता है और कभी-कभी नहीं?
यह काम करता है ... ज्यादातर। जब मेरा टॉमकैट बूट हो रहा है, तो मैं AspectJ init संदेशों को देखता हूं, मेरे उपयोगकर्ता ऑब्जेक्ट्स स्वचालित रूप से फ़ाइल सेवा संदर्भ प्राप्त करते हैं, आदि
समस्या यह है कि कभी-कभी ऐसा नहीं होता है। यह पूरी तरह से यादृच्छिक प्रतीत होता है; कभी-कभी मैं बूट हो जाता हूं और निर्भरता इंजेक्शन नहीं होती है, कभी-कभी वे होती हैं। मुझे पहले अपने उपयोगकर्ता पर @ ट्रांसेक्शनल के साथ परेशानी थी क्योंकि उसने एक संघर्ष बनाया, मैं प्रॉक्सी के साथ विश्वास करता हूं। मैं जेपीए का उपयोग कर रहा हूं, इसलिए मेरा उपयोगकर्ता @ एन्टीटी के साथ चिह्नित है, इसलिए मेरा सबसे अच्छा अनुमान यह है कि यह एक संघर्ष बना रहा है। मैंने पढ़ा है कि आप एक प्रॉक्सी ऑटो प्रॉक्सी नहीं कर सकते हैं। संघर्ष को ऑफ़सेट करने के लिए, मैंने CGLIB और javassist को छोड़कर मुझे कुछ नोट्स का पालन किया जो हाइबरनेट (मेरा जेपीए इम्प्लायर) उपयोग करता है।
सुराग:
- यह सब या कुछ भी नहीं है। मेरे सभी @ कॉन्फिगर करने योग्य उदाहरणों को इंजेक्शन दिया गया है या उनमें से कोई भी नहीं है।
- डीबी से इकाई को फिर से लोड करना (पुनः स्थापित करना) मदद करने के लिए प्रकट नहीं होता है; यह या तो काम कर रहा है या नहीं।
- किसी भी समय टॉमकैट को रिबूट करने से यह भी ठीक नहीं होगा। पासा रोल करने के लिए प्रतीत होता है कि एकमात्र चीज एक पुनर्वितरण है। दूसरे शब्दों में, यदि मैं पुन: नियोजित करता हूं तो यह काम कर सकता है।
मैं यह कैसे पता लगा सकता हूं कि क्या गलत हो रहा है? क्या कोई जेपीए के साथ @ कॉन्फिगर करने योग्य है? मेरी निर्भरता जांच क्यों नहीं है = सही निर्भरता वास्तव में इंजेक्शन नहीं होने पर एक त्रुटि फेंक रही है?
इकाई
@Entity
@Configurable(dependencyCheck = true)
@NamedQueries({ @NamedQuery(name = "User.findAll", query = "SELECT user FROM User user"),
@NamedQuery(name = "User.findByEmail", query = "SELECT user FROM User user WHERE user.email = :email") })
public abstract class User extends BaseModel {
private static final long serialVersionUID = 7881431079061750040L;
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
@Column(unique = true, nullable = false)
private String email;
@Basic(optional = false)
private String password;
@Resource
private transient UserEmailer userEmailer;
@Resource
private transient FileService fileService;
...
aop.xml
<!DOCTYPE aspectj PUBLIC
"-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
<weaver options="-verbose">
<include within="com.myapp.domain..*" />
<exclude within="*..*CGLIB*" />
<exclude within="*..*javassist*" />
</weaver>
<aspects>
<aspect name="org.springframework.beans.factory.aspectj.AbstractInterfaceDrivenDependencyInjectionAspect" />
</aspects>
</aspectj>
applicationContext.xml
...
<context:spring-configured />
<context:load-time-weaver />
<context:component-scan base-package="com.myapp" />
...
मैं भी इन प्रकार के मुद्दों को @ कॉन्फिगर करने योग्य और @ ट्रान्सैक्शनल के साथ अनुभव कर रहा हूं मुझे लगता है कि वसंत संदर्भ शुरू होने से पहले वर्ग लोडर को कक्षा लोडर के साथ करना होगा। इस धागे को देखें: http://forum.springsource.org/showthread.php?t=68406। स्पोरैडिक प्रकृति यह बग बेहद परेशान है। – ghempton
वसंत में सभी बदलावों को देखते हुए, क्या अब इस समस्या का बेहतर समाधान है? – Snekse