我一定错过了一些简单的东西,但是我很难将Autowired属性分配给bean。这里贴出的所有类似答案似乎都围绕着三种解决方案之一:
我试图制作一个最简的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
我错过了什么?
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,得到了相同的结果。 使用相同凭据从本地完美连