gpt4 book ai didi

java - Web 服务中的 Spring Autowired 不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:11:03 26 4
gpt4 key购买 nike

我一定是遗漏了一些简单的东西,但我无法将 Autowiring 属性分配给 bean。此处发布的所有类似答案似乎都围绕三种解决方案之一:

  1. 扩展 SpringBeanAutowiringSupport
  2. 在 applicationContext.xml 中使用
  3. 在applicationContext.xml中使用

我试图制作一个极简主义的 bean 来代表我的 DAO 并将其注入(inject)到 Web 服务中。

DAO 接口(interface):

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!";
}
}

带有注入(inject)的网络服务:

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

bean 标签中的 applicationContext.xml 内容:

<context:annotation-config />
<context:component-scan base-package="ws"/>

<bean id="fooDAO" class="wb.FooDAOImpl" />

这一切都是在最新的 NetBeans 中创建的,在一个使用 Spring 和 Hibernate 框架创建的项目中。当我部署到 JBoss 并且应用程序启动时,我得到了预期的 Bean 实例化:

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

我错过了什么?

最佳答案

SpringBeanAutowiringSupport 必须是一个 bean。您需要使用 @Service 或其他注释(例如 @Component)来注释该类,以指示在发生组件扫描时类应该是 bean。这些将由 Spring 提取并制成 bean。

请记住,为了成为 Autowiring 的参与者,例如注入(inject)另一个 bean,该类本身必须是一个 bean 并由 Spring 的 IOC 容器管理。

关于java - Web 服务中的 Spring Autowired 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21193843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com