如何将以下代码创建到 spring.xml 中的 Client bean 中,以便可以将 Client(Object) 注入(inject)到我的代码中?我正在配置这个 bean 以从 Elasticsearch 获取数据。
Client client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("192.168.0.198",9300));
最佳答案
创建一个 Spring FactoryBean,它允许您公开 Client bean,并且很容易在 Spring 应用程序上下文中配置为 bean。例如
public class ClientFactoryBean implements FactoryBean<Client>{
private String ipAddress;
private int port;
public Class<?> getObjectType(){
return Client.class;
}
public boolean isSingleton(){
return true;
}
public void setPort(int port){
this.port = port;
}
public void setIpAddress(String ipAddress){
this.ipAddress = ipAddress;
}
public Client getObject(){
return new TransportClient().addTransportAddress(new InetSocketTransportAddress(ipAddress,port));
}
}
然后在您的应用程序上下文文件中
<bean id="client" class="some.package.ClientFactoryBean">
<property name="ipAddress" value="192.168.0.198"/>
<propert name="port" value="9300"/>
</bean>
然后您可以像往常一样注入(inject)客户端 Bean。注意。它的类型将是 Client 而不是 ClientFactoryBean,因为 Spring 将检测到它是一个工厂 bean,并将管理 getObject 调用的结果
关于java - 创建bean并调用非setter方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37046713/