2011-08-07 7 views
16

मैं दो सेवा वर्ग है जो एक ही इंटरफ़ेस

ServiceClass1

@Service 
public class ServiceClass1 implements ItemsService{ 

@Autowired 
Class1DaoImpl class1Dao; 

@Transactional 
public List<Class1> getAllItems() { 
    return class1Dao.getAllItems(); 

} 

ServiceClass2

@Service 
public class ServiceClass2 implements ItemsService{ 

@Autowired 
Class2DaoImpl class2Dao; 

@Transactional 
public List<Class2> getAllItems() { 
    return class2Dao.getAllItems(); 

} 

लागू है और यह नियंत्रक वर्ग

 @Controller 
    public class IndexController { 


    @Autowired 
    ServiceClass1 serviceClass1; 

    @Autowired 
    ServiceClass1 serviceClass2;  

     ............ 
     ..... 
} 
है

मैं जब पेज

java.lang.IllegalArgumentException: Can not set com.package.ServiceClass1 field com.package.IndexController.serviceClass1 to $Proxy25 
sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146) 
sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150) 
sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63) 
java.lang.reflect.Field.set(Field.java:657) 
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:500) 
org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84) 
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) 
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:609) 
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:571) 
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:623) 
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:491) 
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:432) 
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) 
javax.servlet.GenericServlet.init(GenericServlet.java:212) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
java.lang.Thread.run(Thread.java:662) 

अनुरोध किया गया था यह त्रुटि आई मैंने किया था कुछ गूगल-इंग और कारण है कि मैं इस त्रुटि हो रही है करने के लिए कोई ठोस जवाब खोजने के लिए प्रतीत नहीं कर सकते हैं?

उत्तर

41

आप इंटरफ़ेस प्रकार, नहीं वर्ग प्रकार के खिलाफ autowire यानी

@Autowired 
ItemsService serviceClass1; 

आप एक से अधिक सेम कि ItemsService लागू है, तो जरूरत है, तो autowiring वास्तव में उचित नहीं है। इसके बजाय @Resource का उपयोग करने पर विचार करें:

@Resource(name="serviceClass1") 
ItemsService serviceClass1; 

@Resource(name="serviceClass2") 
ItemsService serviceClass1; 
+0

@skaffman .. तो मैं संसाधन बीन नाम कहां निर्दिष्ट करूं? मेरा मतलब है कि मैं एक्सएमएल फाइल में सेवा बीन्स घोषित नहीं कर रहा हूं या कम से कम मैंने सोचा था कि ऐसा करना जरूरी नहीं है क्योंकि मैं "घटक-स्कैन" का उपयोग कर रहा था .. बीन कॉन्फ़िगरेशन फ़ाइल में स्पष्ट रूप से घोषित किए बिना, "serviceClass1" नाम कैसे हैं "और" serviceClass2 "हल हो गए हैं? – RKodakandla

+0

@rrkwells: बीन नाम वर्ग नामों से अनुमानित हैं (उदा। 'Com.x.y.ServiceClass1' => 'serviceClass1'। – skaffman

+2

मुझे वास्तव में यह दृष्टिकोण पसंद नहीं है - जैसा कि कक्षा का नाम बदलता है? – Dejell

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