spring属性未注入

spring属性未注入

问题描述:

看代码:[code="java"]
@WebService(targetNamespace = "http://impl.service.com/", endpointInterface = "com.service.ReportPort", portName = "ReportPortImplPort", serviceName = "ReportPortImplService")
public class ReportPortImpl implements ReportPort {

private Map<String, Handler> HandlerMap = new HashMap<String, Handler>();

public Map<String, Handler> getHandlerMap() {
    return HandlerMap;
}

public void setHandlerMap(Map<String, Handler> handlerMap) {
    HandlerMap = handlerMap;
}

@Override
public User invoke(UserInfo info) {
    System.out.println("erwrwerwr");

    Handler [color=red]handler [/color]= HandlerMap.get("B1");

    return null;

}

[/code]
发现红色的handler 未空。再看配置文件:
[code="java"]







[/code]
按理说配置文件中有
这句,HandlerMap就应该有值了吧。可惜不是。web.xml中已经加载了这个配置文件。
我发现ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml")这种方式就能够调用HandlerMap,其中有值。这从令一方面说明配置文件时没问题的。
请各位大侠给点意见,我现在真没辙了。

[code="java"]
@WebService(targetNamespace = "http://impl.service.com/", endpointInterface = "com.service.ReportPort", portName = "ReportPortImplPort", serviceName = "ReportPortImplService")

public class ReportPortImpl implements ReportPort {

[/code]
楼上的意思是说,以这种方式暴露webservice,实际上,ReportPortImpl并不是由spring托管的,所以注入是无效的!
你关于webservice的配置xml贴出来看看,参考一下:[url]http://www.ibm.com/developerworks/library/ws-pojo-springcxf/[/url]

确定这个report的bean是spring创建的吗?

这个我知道,你手动从ClassPathXmlApplicationContext 里面,可以取到这个对象,说明配置没问题。
我的意思是,你的ReportPortImpl 对象是怎么得到的?确定是从spring容器里面的得到吗?还是说是自己new出来的?

你要保证你的对象从spring容器里面取得,就好像你用ClassPathXmlApplicationContext 测试一样,你是自己初始化spring的context,然后getBean得到这个对象。
在web项目里,一般这种对象是自动注入的,而不是手动创建的。

配置应该没问题,可能创建的方式有问题。同一楼上的,spring就是用于自动注入的,不应该手动创建。

我说的是获得方式,你把对象用spring管理,但是用的时候不通过spring拿,而是自己创建,那怎么行,建议你看看spring的书,先系统的看看,理解一下spring的原理吧。

[quote]
我发现ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml")这种方式就能够调用HandlerMap,其中有值
[/quote]
你说的HandlerMap里面有值,值是什么?

spring支持注入的方式包含:setter和constructor,这里显然使用了setter。我估计你说的有值是指ReportPortImpl内HandlerMap不为空,在没配置:
[code="java"]










[/code]
这一段,HandlerMap不为空是因为你进行了赋值初始化。而HandlerMap内部elements应该是为空的,因为上面的注入是不成功的,因为不符合setter命名方式:应该把
[code="java"][/code]改为[code="java"][/code]

PS:java变量命名方式最好符合一般的约定。