0

如何在spring.xml中將以下代碼創建到客戶端bean中,以便可以將Client(Object)注入到我的代碼中?我正在配置這個bean來從彈性搜索中獲取數據。創建bean並調用non-setter方法

Client client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("192.168.0.198",9300)); 

回答

1

創建一個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> 

然後,您可以作爲一般注入客戶端Bean。 NB。它的類型將是Client not ClientFactoryBean,因爲Spring會檢測到它是一個工廠bean,並且它將管理getObject調用的結果