2011-10-06 3 views
0

Spring 환경을 올바르게 설정하는 데 문제가 있습니다. 내 applicationContext.xml에서 나는이 :Spring 3에서 @Required 필드를 NULL로 삽입 함

... 
<context:annotation-config /> 
<context:component-scan base-package="com.company.server" /> 

<import resource="databaseConfig.xml" /> 

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>classpath:config.properties</value> 
     </list> 
    </property> 
</bean> 

databaseConfig에서 :

<tx:annotation-driven /> 

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass"> 
     <value>${jdbc.driver.className}</value> 
    </property> 
    <property name="jdbcUrl"> 
     <value>${jdbc.url}</value> 
    </property> 
    <property name="user"> 
     <value>${jdbc.username}</value> 
    </property> 
    <property name="password"> 
     <value>${jdbc.password}</value> 
    </property> 
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource"> 
     <ref bean="dataSource" /> 
    </property> 
    <property name="packagesToScan" value="org.adit.spring.hibernate.entity" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${jdbc.hibernate.dialect}</prop> 
      <prop key="hibernate.hbm2ddl.auto">create</prop> 
      <prop key="hibernate.show_sql">false</prop> 
     </props> 
    </property> 
</bean> 

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

지금 내 문제가 시작됩니다. 다음 클래스를 보면 :

@Service 
public class ViewContactsServiceImpl extends RemoteServiceServlet implements ViewContactsService { 

    private ContactDao contactDao; 

    @Autowired 
    public void setContactDao(ContactDao contactDao) { 
     this.contactDao = contactDao; 
    } 

    @Override 
    public ArrayList<Contact> getAllContacts() { 
     return contactDao.getAllContacts(); 
    } 
} 

응용 프로그램을 시작하는 동안 모두 괜찮습니다. Spring은 빈을 생성 할 수 없다거나 속성을 삽입 할 수 없다는 불평을하지 않는다. 그러나 contactDao 필드에 액세스하려고 할 때마다 null입니다.

감사합니다.

@Repository("contactDao") 
@Transactional 
public class ContactDaoImpl implements ContactDao { ... } 

업데이트 2

NB :


UPDATE는

나는 또한 언급해야 내 ContactDaoImpl.java는 다음과 같이 정의된다. 이것은 GWT 응용 프로그램입니다.

ViewContactServiceImpl.java :

package com.company.server.service.viewcontacts; 

ViewContactsService.java :

package com.company.client.viewcontacts; 

ContactDaoImpl.java

package com.company.server.contact; 

ContactDao.java

package com.company.server.contact; 
+0

ViewContactsServiceImpl 클래스 및 인터페이스의 패키지는 무엇입니까? –

+0

@ danny.lesnik - 업데이트 2를 확인하십시오. –

+0

죄송합니다. ContactDaoImpl 및 인터페이스 패키지는 무엇에 관해서는 언급하지 않으십니까? –

답변

3

은 내가 ViewContactsServiceImpl은 (RemoteServiceServlet을 기반으로 추측) GWT에 의해 인스턴스화되고 엷게 - 그래서 관리 Bean을 스프링에 있지 않습니다.

init 메소드를 재정의하고 구현하여 수동으로 자동 줄 바꿈을 호출해야합니다. 아래에 표시된 코드와 유사합니다 (이 article부터). 이 기사에서 설명한대로 모든 GWTService가 확장 할 수있는 AbstractRemoteServlet을 만듭니다. GWT 원격 서비스로 봄 관리 빈을 노출하는 또 다른 방법에 대한 GWT-SL 도서관에서

@Override 
public void init(ServletConfig config) throws ServletException { 
    super.init(config); 
    WebApplicationContext ctx = WebApplicationContextUtils 
      .getRequiredWebApplicationContext(config.getServletContext()); 
    AutowireCapableBeanFactory beanFactory = ctx 
      .getAutowireCapableBeanFactory(); 
    beanFactory.autowireBean(this); 
} 

봐.

+0

LEGEND! 대단히 감사합니다. 완벽하게 작동합니다. –

관련 문제