java - 创建bean并调用非setter方法

标签 java spring elasticsearch spring-bean elasticsearch-java-api

如何将以下代码创建到 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/

相关文章:

java - java并发hashmap中clear的默认行为是什么

java - 如何在 Spring 中初始化或配置单例/工厂方法?

java - 使用 Spring 访问 XmlBeanFactory 的更好设计

scala - 如何在Spark和Elasticsearch中迭代hadoop MapWritable

java:由于错误元素 java.util.ArrayList 中存在问题,没有为 ProductMapper 创建实现

java - 我知道抽象/重写的静态方法在 Java 中是不可能的,但我的代码似乎需要它们

elasticsearch - 在Elasticsearch中 bool 查询中每个部分的重量恒定

elasticsearch - 在elasticsearch中查找和替换所有文档

java - Android 中写入锁定文件

spring - 带有可选参数的 jpa 查询