applicationContext.xml上的bean defiend正在使用ClassPathXmlApllicationContext和WebApplicationContext进行实例化。在使用前者时,bean按预期返回,但在使用后者WebApplicationContext时,我得到一个空值。
仅供参考:完全不使用Spring。仅用于定义bean并初始化它。它是一个基于jboss的Web服务应用程序。
我在web.xml中定义了WebApplicationContext,如下所示
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<display-name>Service</display-name>
<servlet-name>MService</servlet-name>
<servlet-class>
com.xyz.atop.ws.memb.MServiceImpl
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MService</servlet-name>
<url-pattern>/Service</url-pattern>
</servlet-mapping>
</web-app>
applicationContext.xml
中的条目 <beans ...>
<context:annotation-config />
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<bean id="helper" name="helper" class="com.xyz.svc.wrapper.Helper">
<constructor-arg type="java.lang.String" value="ABC"/>
</bean>
</beans>
在我的代码中使用ClassPathApplicationContext(按预期返回bean实例),如下所示
private static Helper helper;
public MServiceImpl() {
}
static {
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
helper = (Helper) appContext.getBean("helper");
}
......
......
在使用WebApplicationContext时,我尝试了@Autowired注释,甚至尝试了setter注入。这两种方式都是我返回的空值。
我正在尝试初始化的“Helper”类来自jar文件,而jar文件又调用了cxf-spring应用程序。
请查看上面的场景,并建议在使用WebApplicationCOntext时删除空指针。
答案 0 :(得分:0)
好的,春豆被注入其他春豆。 MService也需要是一个bean。然后,Autowire将帮助程序注入MService bean。您不能使用静态初始化程序来执行此操作,因为它是在加载应用程序上下文之前的类加载时运行的。此外,助手不应该是静态的 - 这是不好的做法 - 它使测试变得非常困难。
答案 1 :(得分:0)
场景:使用WebApplicationContext初始化applicationCOntext.xml文件中定义的bean,并在自动装配后尝试在代码中使用即时bean对象时收到null。
本场景中的问题:我正在尝试在Spring控制的类中自动装配一个spring bean。
解决方案: 使用Spring的SpringBeanAutowiringSupport类扩展Servlet类(不在Spring控件中的类)是我的JBOSS WS的端点,这帮助我解决了这个问题。
以下是代码段
public class MServiceImpl extends SpringBeanAutowiringSupport implements MService{
@Autowired
private Helper helper;
public MServiceImpl() {
}
......
......
}
想通过使用静态块初始化spring bean是不好的方法。感谢@Engineer Dollery