0

如何将以下代码创建到 spring.xml 中的 Client bean 中,以便我可以将 Client(Object) 注入我的代码中?我正在配置这个 bean 以从弹性搜索中获取数据。

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

1 回答 1

1

创建一个 Spring FactoryBean,它允许您公开一个客户端 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。注意。它的类型将是 Client 而不是 ClientFactoryBean,因为 Spring 会检测到它是一个工厂 bean,它将管理 getObject 调用的结果

于 2016-05-05T15:07:03.810 回答