当前位置: 首页 > 知识库问答 >
问题:

Web服务中的Spring Autowired不工作

姚鹤龄
2023-03-14

我一定错过了一些简单的东西,但是我很难将Autowired属性分配给bean。这里贴出的所有类似答案似乎都围绕着三种解决方案之一:

    null

我试图制作一个最简的bean来表示我的DAO并将其注入到Web服务中。

DAO接口:

package wb;
public interface FooDAO {
    public String doNothing();
}

DAO实现:

package wb;
import org.springframework.stereotype.Component;

@Component
public class FooDAOImpl implements FooDAO {
    public FooDAOImpl() {
        System.out.println("FooDAOImpl: Instantiated " + this);
    }

    @Override
    public String doNothing() {
        System.out.println("FooDAOImpl: doNothing() called");
        return "Did nothing!";
    }
}
package ws;

import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import wb.FooDAO;

@WebService(serviceName = "WS")
public class WS extends SpringBeanAutowiringSupport {

    @Autowired(required = true)
    private FooDAO fooDAO;

    @WebMethod(exclude = true)
    public void setFooDAO(FooDAO fooDAO) {
        this.fooDAO = fooDAO;
        System.out.println("WS: fooDAO set = " + fooDAO);
    }

    public WS() {
        System.out.println("WS: WS bean instantiated!");
    }

    @WebMethod(operationName = "doNothing")
    @WebResult(name = "whatDidIDo")
    public String doNothing() {
        System.out.println("WS: doNothing() says DAO = " + fooDAO);
        return fooDAO == null ? "Could not do nothing!" : fooDAO.doNothing();
    }
}
<context:annotation-config />
<context:component-scan base-package="ws"/>

<bean id="fooDAO" class="wb.FooDAOImpl" />
11:01:46,767 INFO  [stdout] (MSC service thread 1-6) WS: WS bean instantiated!
11:01:47,571 INFO  [stdout] (MSC service thread 1-15) FooDAOImpl: Instantiated wb.FooDAOImpl@11176682
11:03:07,097 INFO  [stdout] (http--127.0.0.1-8080-1) WS: doNothing() says DAO = null

我错过了什么?

共有1个答案

慕阳伯
2023-03-14

SpringBeanAutowiringSupport必须是bean。您需要使用@service或其他注释(如@component)对该类进行注释,以指示当组件扫描发生时类应该是bean。这些将被spring拾取并制成bean。

请记住,为了成为自动连接的参与者,例如注入另一个bean,类本身必须是一个bean,并由Spring的IOC容器管理。

 类似资料:
  • 使用spring-boot-web-services依赖项。当应用程序启动时,我可以正确地看到wsdl,但当我使用chrome wizdler进行适当输入时,我会失败。甚至无法看到endpoint类中的print语句。 需要确认我是否基于WSDL为注释@PayloadRoot、@RequestPayload和@ResponsePayload提供了正确的值。 下面是我的WSDL和endpoint类:

  • 我有一个像这样的web服务方法。我将通过POST发送JSON映射到该方法,但它没有正确设置address字段。我知道JSON是有效的,因为它直接从一个将一个人转储到JSON并读回它的单元测试出来。测试通过(反序列化的对象有2个电话号码),这是确切的字符串。 当我发布JSON时,它不会在对象上设置phone numbers映射。以下是输出: 信息:保存实体:Person{id=null,firstn

  • 我有一个spring soap web服务,我想使用自定义日志记录方面来度量它的性能。对于普通的spring bean来说,这个方面工作得很好,但是对于Endpoint-InvokeInterral方法,这个方面没有被调用。像保护方法一样在Spring有什么限制吗?谢谢你帮我把它弄好? 代码示例: Spring WS终结点: 更新:将访问修饰符更改为public,这是否意味着Spring允许AOP

  • 在 Web 服务器中 Web 应用程序的根目录是一个特定的路径。例如,一个catalog应用,可以位于 http://www.mycorp.com/catalog。以这个前缀开始的所有请求将被路由到代表 catalog 应用的 ServletContext 环境中。 servlet 容器能够制定Web应用程序自动生成的规则。例如,一个~user/映射可用于映射到一个基于/home /user/pu

  • 我正在尝试将大量文件从服务器A传输到服务器B。我已经在A上设置了FTP(使用FileZilla)。 当我尝试从PC连接到A时,它工作正常。但当我尝试从B连接到A时,它不起作用。FTP用户登录,但目录列表命令一直处于停滞状态。 防火墙端口21已打开。我尝试了多台服务器、不同的FTP客户端,但没有用。除了FileZilla,我还尝试了内置FTP服务的ISS,得到了相同的结果。 使用相同凭据从本地完美连