欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring的FactoryBean机制

程序员文章站 2023-12-29 09:53:40
...

spring可以通过的FactoryBean的形式把一个Factory整合到spring中。比如solr的客户端CommonsHttpSolrServer:

	CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://192.168.1.100:7100/solr/feed");
		server.setSoTimeout(1000);
		server.setConnectionTimeout(100);
		server.setDefaultMaxConnectionsPerHost(100);
		server.setMaxTotalConnections(100);
		server.setAllowCompression(true);
		server.setParser(new XMLResponseParser());

 我模仿SqlMapClientFactoryBean的方式来实现一个solr的FactoryBean

 

public class SolrServerFactoryBean implements FactoryBean<CommonsHttpSolrServer>, InitializingBean {

	private CommonsHttpSolrServer solrServer; // http://192.168.1.100:7100/solr/feed

	private String solrServerUrl;

	private int soTimeout; // socket read timeout

	private int connectionTimeout;

	private int defaultMaxConnectionsPerHost;

	private int maxTotalConnections;

	@Override
	public void afterPropertiesSet() throws Exception {
		solrServer = new CommonsHttpSolrServer(solrServerUrl);
		solrServer.setAllowCompression(true);
		solrServer.setSoTimeout(soTimeout);
		solrServer.setConnectionTimeout(connectionTimeout);
		solrServer.setDefaultMaxConnectionsPerHost(defaultMaxConnectionsPerHost);
		solrServer.setMaxTotalConnections(maxTotalConnections);
	}

	@Override
	public CommonsHttpSolrServer getObject() throws Exception {
		return solrServer;
	}

	@Override
	public Class<?> getObjectType() {
		return (this.solrServer != null ? this.solrServer.getClass() : CommonsHttpSolrServer.class);
	}

	@Override
	public boolean isSingleton() {
		return true;
	}
	

	public void setSolrServerUrl(String solrServerUrl) {
		this.solrServerUrl = solrServerUrl;
	}

	public void setSoTimeout(int soTimeout) {
		this.soTimeout = soTimeout;
	}

	public void setConnectionTimeout(int connectionTimeout) {
		this.connectionTimeout = connectionTimeout;
	}

	public void setMaxTotalConnections(int maxTotalConnections) {
		this.maxTotalConnections = maxTotalConnections;
	}

	public void setDefaultMaxConnectionsPerHost(int defaultMaxConnectionsPerHost) {
		this.defaultMaxConnectionsPerHost = defaultMaxConnectionsPerHost;
	}
}
 

配置文件:

    <bean id="solrServer" class="com.duitang.search.core.SolrServerFactoryBean">
    	<property name="solrServerUrl" 					value="${solrServerUrl}"></property>
    	<property name="soTimeout" 						value="1000"></property>
    	<property name="connectionTimeout" 				value="100"></property>
    	<property name="defaultMaxConnectionsPerHost" 	value="32"></property>
    	<property name="maxTotalConnections" 			value="128"></property>
    </bean>

这里solrServerUrl是通过<context:property-placeholder location="/WEB-INF/*.properties"/>替换的

 

上一篇:

下一篇: