我正在开发一个JAX-WS项目,现在我想为我的一个实用程序添加依赖注入。
该实用程序具有接口; GeocodeUtil和两个实现,GeocodeUtilGoogleImpl和GeocodeUtilYahooImpl。现在,在我的服务类中,我有以下内容:
public class MyService {
private GeocodeUtil geocodeUtil;
/* getter and setter for geocodeUtil */
}
在我的applicationContext.xml中,我有以下内容:
<bean id="geocodeUtil" class="com.company.GeocodeUtilGoogleImpl"/>
<bean id="myService" class="com.company.MyService">
<property name="geocodeUtil" ref="geocodeUtil" />
</bean>
继承我的web.xml(只有与Spring相关的部分):
<!-- Spring context -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- Listeners -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
当我创建MyService对象的实例并尝试使用geocodeUtil时,我得到一个NullPointerException,在我看来,没有注入实现。 我认为很奇怪的是,一旦我删除了getter / setter,应用程序就会在启动时崩溃,Spring会抱怨缺少的setter / getter,这让我觉得XML配置实际上是正确的。
我没有使用任何与弹簧相关的Java注释。
非常感谢任何帮助。
答案 0 :(得分:2)
虽然您发布的内容尚不清楚,但我怀疑您没有从应用程序上下文中检索实例。如果您没有使用任何注释,那么调用MyService对象的代码需要通过执行以下操作从应用程序上下文中获取bean:
ServletContext servletContext =this.getServletContext();
WebApplicationContext wac = WebApplicationContextUtils.
getRequiredWebApplicationContext(servletContext);
MyService user = (MyService)wac.getBean("myService");
您提供的弹簧配置是正确的。您需要做的就是确保创建应用程序上下文,并从应用程序上下文中检索对象。有关详细信息,请参阅此处:
答案 1 :(得分:2)
您也应该从Spring上下文中获取Service实例。
使用new运算符创建服务对象不会触发spring为该实例注入对象。