Spring HttpRemoting客户端作为Java配置Bean

时间:2011-09-01 09:02:29

标签: java spring spring-remoting

我正在尝试将Spring从XmlApplicationContext迁移到AnnotationConfigApplicationContext(更多信息:Java-based container configuration)。

一切都很完美,但我不知道如何创建一个HttpInvoker客户端。 XML配置如下:

<bean id="httpInvokerProxy" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
    <property name="serviceUrl" value="http://remotehost:8080/remoting/AccountService"/>
    <property name="serviceInterface" value="example.AccountService"/>
</bean>

Java配置应该如何?我还需要这个工厂豆吗?我认为应该能够使用这种配置方法在没有此包装器的情况下实例化客户端。

这(某种程度上)让我心疼:

public @Bean AccountService httpInvokerProxy() {
    HttpInvokerProxyFactoryBean proxy = new HttpInvokerProxyFactoryBean();
    proxy.setServiceInterface(AccountService.class);
    proxy.setServiceUrl("http://remotehost:8080/remoting/AccountService");
    proxy.afterPropertiesSet();
    return (AccountService) proxy.getObject();
}

1 个答案:

答案 0 :(得分:8)

实际上,正确的(和等效的)版本会更加尴尬:

public @Bean HttpInvokerProxyFactoryBean httpInvokerProxy() {
    HttpInvokerProxyFactoryBean proxy = new HttpInvokerProxyFactoryBean();
    proxy.setServiceInterface(AccountService.class);
    proxy.setServiceUrl("http://remotehost:8080/remoting/AccountService");
    return proxy;
}

(毕竟你通常希望FactoryBean由Spring管理,而不是它返回的Bean)

请参阅最近的这篇文章以供参考:

  

What's a FactoryBean?