2011-02-11 10 views
5

[वसंत 3.0.5] [jboss 5.1]और @Service साथ जावा/स्प्रिंग समस्या @Autowired एनोटेशन

मैं @Service, जो thet एक ही इंटरफ़ेस लागू करता है के रूप में लेबल कई वर्गों की है।

उदाहरण के लिए,

@Service(value="test1") 
public TestImpl1 implements Test {} 
@Service(value="test2") 
public TestImpl2 implements Test {} 

इसके बाद, मैं निम्नलिखित संरचना

public SomeClass { 
@Autowired 
@Qualifier("test1") 
Test test1; 
@Autowired 
@Qualifier("test2") 
Test test2; 

मैं (तैनाती पर) एक अपवाद हो रही है

10:36:58,277 ERROR [[/test-web]] Servlet /test-web threw load() 
exception 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No 
unique bean of type [pl.tests] is defined: expected single matching 
bean but found 2: [test1, test2] 
     at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.doReso lveDependency(DefaultListableBeanFactory.java: 
796) 
     at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolv eDependency(DefaultListableBeanFactory.java: 
703) 
     at 
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostPro cessor 
$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java: 
474) 

किसी को भी पता है कि यह कैसे हल करने के लिए ?

टी

+0

क्या है 'pl.tests' पर @Qualifier("test1") जोड़ने की कोशिश कहते हैं? – skaffman

+0

क्षमा करें, pl.tests.SomeClass – user6778654

उत्तर

4

कुछ विकल्प:

  • इंजेक्शन बिंदु
  • में उपयोग @Resource(name="test1")javax.inject.Qualifer तंत्र का उपयोग कर सकते हैं। संक्षेप में - आप एक एनोटेशन (@Test) परिभाषित करते हैं और एनोटेशन को @Qualifier के साथ एनोटेट करते हैं। फिर इंजेक्शन बिंदु पर @Autowired @Test का उपयोग करें।
  • स्पष्ट रूप से लक्षित बीन पर क्वालीफायर सेट करें। डॉक्स केवल एक्सएमएल संस्करण <qualifier /> दिखाते हैं, लेकिन सेवा परिभाषा

Here is the documentation about it

+0

ठीक है, मैंने कोड को कुछ ऐसा बदल दिया है। @Resource (नाम = "test1") सार्वजनिक TestImpl1 लागू करता टेस्ट {} @Resource (नाम = "test2") सार्वजनिक TestImpl2 लागू करता टेस्ट {} और लक्ष्य सेम में // लेकिन वह यह है कि इस मुद्दे के लिए अप्रासंगिक सार्वजनिक SomeClass { @Autowired @Qualifier ("test1") टेस्ट टेस्ट 1; मुझे अपवाद (तैनाती पर) मिल रहा है निर्भरता के लिए पाए गए प्रकार [pl.Test] का कोई मिलान करने वाला बीन: कम से कम 1 बीन की उम्मीद है जो इस निर्भरता के लिए ऑटोवायर उम्मीदवार के रूप में अर्हता प्राप्त करता है। निर्भरता एनोटेशन: {@ org.springframework.beans.factory.annotation.Autowired (आवश्यक = सत्य)} – user6778654

+0

@ इंजेक्शन बिंदु "द्वारा उपयोगकर्ता 612 925 मेरा मतलब उस बिंदु का मतलब है जहां आप इंजेक्ट करते हैं, सेवा परिभाषा नहीं। – Bozho

+0

जैसा आपने अभी लिखा था मैंने किया था। ऐसा लगता है कि समस्या समान घोषणा कक्षाओं में सेवाओं के रूप में है। अब मेरे पास कोड है: @ सेवा (मूल्य = "test1") सार्वजनिक परीक्षण Impl1 परीक्षण लागू करता है {} @ सेवा (मूल्य = "test2") सार्वजनिक परीक्षण Impl2 परीक्षण लागू करता है {} इंजेक्शन के बिंदु के बिना। मेरे पास एक ही अपवाद है: परिभाषित किया गया है: अपेक्षित एकल मिलान बीन लेकिन पाया गया 2: [test1, test2] – user6778654

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