मैं नीचे एक इकाई श्रोता में एक वसंत सेम सुई AOP का उपयोग कर के रास्ते जाने के लिए शुरू कर दिया।
यह एक जेपीए EntityListener वर्ग में वसंत में कामयाब सेम इंजेक्षन करना संभव नहीं है: एक दिन और अनुसंधान और अलग अलग बातें की कोशिश कर के एक आधे के बाद मैं इस link जिसमें कहा गया बारे में जाना। ऐसा इसलिए है क्योंकि जेपीए श्रोता तंत्र एक स्टेटलेस वर्ग पर आधारित होना चाहिए, इसलिए विधियां प्रभावी रूप से स्थिर हैं, और गैर-संदर्भ जागरूक हैं। ... एओपी की कोई राशि आपको बचाएगी, श्रोता का प्रतिनिधित्व करने वाले 'ऑब्जेक्ट' को कुछ भी इंजेक्शन नहीं दिया जाता है, क्योंकि कार्यान्वयन वास्तव में उदाहरण नहीं बनाते हैं, लेकिन क्लास विधि का उपयोग करते हैं।
इस बिंदु पर मैं EclipseLink DescriptorEventAdapter भर में फिर से इकट्ठा हुआ और ठोकर खाई। इस जानकारी का उपयोग करके मैंने एक श्रोता वर्ग बनाया जो वर्णनकर्ता एडाप्टर को बढ़ाता है।
public class EntityListener extends DescriptorEventAdapter {
private String injectedValue;
public void setInjectedValue(String value){
this.injectedValue = value;
}
@Override
public void aboutToInsert(DescriptorEvent event) {
// Do what you need here
}
}
आदेश वर्ग का उपयोग करने के मैं अपने इकाई वर्ग पर @EntityListeners एनोटेशन का इस्तेमाल किया जा सकता था। दुर्भाग्यवश, यह विधि स्प्रिंग को मेरे श्रोता के निर्माण को नियंत्रित करने की अनुमति नहीं देगी और नतीजतन निर्भरता इंजेक्शन की अनुमति नहीं होगी।इसके बजाय मैं अपने वर्ग के लिए निम्न 'init' समारोह कहा:
public void init() {
JpaEntityManager entityManager = null;
try {
// Create an entity manager for use in this function
entityManager = (JpaEntityManager) entityManagerFactory.createEntityManager();
// Use the entity manager to get a ClassDescriptor for the Entity class
ClassDescriptor desc =
entityManager.getSession().getClassDescriptor(<EntityClass>.class);
// Add this class as a listener to the class descriptor
desc.getEventManager().addListener(this);
} finally {
if (entityManager != null) {
// Cleanup the entity manager
entityManager.close();
}
}
}
एक छोटे से वसंत एक्सएमएल विन्यास
<!-- Define listener object -->
<bean id="entityListener" class="EntityListener " init-method="init">
<property name="injectedValue" value="Hello World"/>
<property name="entityManagerFactory" ref="emf"/>
</bean>
अब हम एक स्थिति है जहाँ वसंत एक इकाई श्रोता बनाता है जोड़े, जो कुछ भी निर्भरता के साथ यह इंजेक्शन की आवश्यकता है, और श्रोता ऑब्जेक्ट स्वयं को इकाई वर्ग के साथ पंजीकृत करता है जिस पर वह सुनना चाहता है।
मुझे आशा है कि इस मदद करता है।
भी देखें http://stackoverflow.com/questions/8616146/eventlisteners-using- हाइबरनेट -4-0-साथ-वसंत-3-1-0-रिलीज – Ralph
मुझे भी एक ही समस्या का सामना करना पड़ रहा था और एक समाधान मिला और उसने इसे किसी अन्य पोस्ट पर उत्तर दिया है http://stackoverflow.com/questions/22171221/how- to-inject-entitymanager-in-entitylisteners/42222592 # 42222592 –