2010-11-27 7 views
6

में ऑटोवायर एनोटेटेड सेवा (या दाओ) तक पहुंच नहीं सकते हैं मुझे यह समस्या है जिसे मैं ठीक नहीं कर सकता।वसंत-नलपोइनटेरेक्सप्शन- गैर-एनोटेशन कक्षा

मेरे @Controller से, मैं आसानी से अपने ऑटोवायर @Service कक्षा तक पहुंच सकता हूं और इसके साथ कोई समस्या नहीं खेल सकता। लेकिन जब मैं एनोटेशन के बिना एक अलग वर्ग से ऐसा करता हूं, तो यह मुझे NullPointerException देता है।

मेरे नियंत्रक (काम करता है) -

@Controller 
public class UserController { 
@Autowired 
UserService userService;... 

मेरे अलग जावा वर्ग (काम नहीं कर रहा) -

public final class UsersManagementUtil { 
    @Autowired 
    UserService userService; 

या

@Autowired 
UserDao userDao; 

userService या userDao हमेशा अशक्त कर रहे हैं! बस कोशिश कर रहा था अगर उनमें से कोई भी काम करता है।

मेरी घटक स्कैन सेटिंग में स्कैनिंग के लिए रूट स्तर पैकेज सेट है, जो ठीक होना चाहिए।

मेरी सर्वलेट संदर्भ -

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xsi:schemaLocation=" 
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> 
<!-- the application context definition for the 
     springapp DispatcherServlet --> 
<!-- Enable annotation driven controllers, validation etc... --> 

<context:property-placeholder location="classpath:jdbc.properties" /> 
<context:component-scan base-package="x" /> 
<tx:annotation-driven transaction-manager="hibernateTransactionManager" /> 

    <!-- package shortended --> 
<bean id="messageSource" 
class="o.s.c.s.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="/WEB-INF/messages" /> 
</bean> 

<bean id="dataSource" 
class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${database.driver}" /> 
    <property name="url" value="${database.url}" /> 
    <property name="username" value="${database.user}" /> 
    <property name="password" value="${database.password}" /> 
</bean> 

    <!-- package shortened --> 
<bean id="viewResolver" 
    class="o.s.w.s.v.InternalResourceViewResolver"> 

    <property name="prefix"> 
     <value>/</value> 
    </property> 
    <property name="suffix"> 
     <value>.jsp</value> 
    </property> 
    <property name="order"> 
     <value>0</value> 
    </property> 
</bean> 

     <!-- package shortened --> 
    <bean id="sessionFactory" 
     class="o.s.o.h3.a.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="annotatedClasses"> 
    <list> 
     <value>orion.core.models.Question</value> 
     <value>orion.core.models.User</value> 
     <value>orion.core.models.Space</value> 
     <value>orion.core.models.UserSkill</value> 
     <value>orion.core.models.Question</value> 
     <value>orion.core.models.Rating</value> 
    </list> 
    </property> 
     <property name="hibernateProperties"> 

     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
      <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
     </props> 
     </property> 
</bean> 

<bean id="hibernateTransactionManager" 
    class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

कोई सुराग?

+0

के संभावित डुप्लिकेट का उपयोग कर वस्तु की इन्स्टेन्शियशन के बाद मैन्युअल autowiring को गति प्रदान [क्यों मेरी स्प्रिंग @Autowired फ़ील्ड रिक्त है?] (Http: // stackoverflow .com/प्रश्न/19896870/क्यों-मेरा-वसंत-ऑटोवायर-फील्ड-नल) – chrylis

उत्तर

6

से Spring Reference 3.0

डिफ़ॉल्ट रूप से, कक्षाओं @Component, @Repository, @Service, @Controller साथ उसकी व्याख्या, या एक कस्टम एनोटेशन है जो अपने आप @Component साथ टिप्पणी की जाती है केवल पता लगाया उम्मीदवार घटक हैं।

UsersManagementUtil आपकी आवश्यकता के आधार पर उनमें से एक के साथ एनोटेट किया जाना चाहिए।

+0

यह वही है जो मैं समझ गया था लेकिन मेरे लिए काम नहीं कर रहा था .. @ कॉम्पोनेंट का पता चला है लेकिन ऑटोवायर बीन अभी भी शून्य है .. कोई त्रुटि नहीं अन्यथा – user286806

+0

उपयोगकर्ता सेवा के बारे में क्या, क्या वसंत प्रबंधित है? (आपके एक्सएमएल में एनोटेटेड या परिभाषित) –

4

वसंत निर्भरता इंजेक्शन केवल वसंत द्वारा प्रबंधित घटकों में काम करता है। यदि आपका UsersManagementUtil स्प्रिंग द्वारा प्रबंधित नहीं किया जाता है (यानी स्प्रिंग बीन नहीं है), @Autowired इसके अंदर काम नहीं करता है। या तो एक वसंत सेम के रूप में यह घोषणा करते हैं (<bean> या एनोटेशन का उपयोग कर), या

applicationContext.getAutowireCapableBeanFactory().autowireBean(object);