Java Spring 3将@Required字段设置为NULL

Java Spring 3将@Required字段设置为NULL,java,spring,Java,Spring,我在正确设置Spring环境方面遇到了一些问题。在我的applicationContext.xml中,我有: ... <context:annotation-config /> <context:component-scan base-package="com.company.server" /> <import resource="databaseConfig.xml" /> <bean id="propertyConfigurer" class=

我在正确设置Spring环境方面遇到了一些问题。在我的
applicationContext.xml
中,我有:

...
<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>
现在我的问题开始了。如果您查看以下类:

@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();
    }
}

更新2

注意。这是一个GWT应用程序

查看ContactServiceImpl.java

package com.company.server.service.viewcontacts;
package com.company.client.viewcontacts;
查看ContactsService.java

package com.company.server.service.viewcontacts;
package com.company.client.viewcontacts;
ContactDaoImpl.java

package com.company.server.contact;
package com.company.server.contact;
ContactDao.java

package com.company.server.contact;
package com.company.server.contact;

我认为ViewContactsServiceImpl是由GWT(基于RemoteServiceServlet的猜测)实例化的,所以它不是spring管理的bean

您需要通过重写和实现init方法手动调用autowire。类似于下面显示的代码(来自此)。正如那篇文章中所解释的,创建一个所有GWT服务都可以扩展的AbstractRemoteServlet

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

查看库,了解将spring托管bean公开为GWT远程服务的另一种方法。

我认为ViewContactsServiceImpl是由GWT实例化的(基于RemoteServiceServlet的猜测)——因此它不是spring托管bean

您需要通过重写和实现init方法手动调用autowire。类似于下面显示的代码(来自此)。正如那篇文章中所解释的,创建一个所有GWT服务都可以扩展的AbstractRemoteServlet

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

查看库,了解将spring托管bean公开为GWT远程服务的另一种方法。

ViewContactsServiceImpl类及其接口的包是什么?@danny.lesnik-查看我的更新2。很抱歉,我忘了提到ContactDaoImpl及其接口包了吗?@danny.lesnik-再次检查更新2:)ViewContactsServiceImpl类及其接口的包是什么?@danny.lesnik-检查我的更新2。对不起,我忘了提到ContactDaoImpl及其接口包了吗?@danny.lesnik-再次检查更新2:)LEGEND!非常感谢。很完美,传奇!非常感谢。工作完美。