`
san_yun
  • 浏览: 2651903 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

spring的FactoryBean机制

 
阅读更多

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"/>替换的

 

分享到:
评论

相关推荐

    spring的FactoryBean增强我们的目标对象.rar

    `FactoryBean`是Spring中用于对象创建的一种高级机制,它是一个返回特定类型对象的工厂。当我们声明一个bean为`FactoryBean`类型时,Spring容器在实例化bean时会调用`FactoryBean`的相关方法来获取实际的对象,而...

    spring中FactoryBean中的getObject()方法实例解析

    Spring 框架中 FactoryBean 是一个非常重要的概念,它提供了一种创建和管理 Bean 的机制。在 Spring 中,FactoryBean 是一个特殊的 Bean,它可以创建其他 Bean,並提供了对这些 Bean 的管理。今天,我们将深入探讨 ...

    详解Spring中的FactoryBean

    总结来说,Spring的`FactoryBean`提供了一种强大的机制,允许我们在运行时动态地创建和配置Bean,尤其适用于处理复杂逻辑和多步骤的实例化过程。通过自定义`FactoryBean`,我们可以完全控制Bean的生命周期,使得...

    spring源码解析之FactoryBean相关测试代码demo

    在Spring框架中,`FactoryBean`是一个非常关键的接口,它允许我们自定义对象的创建方式,这在...通过阅读和理解`FactoryBean`相关的测试代码,我们可以更好地掌握Spring框架的内部机制,以及如何利用它来解决实际问题。

    spring中的FactoryBean代码示例

    Spring中的FactoryBean代码示例 ...FactoryBean是一种非常有用的机制,可以帮助我们更好地管理Bean的生命周期和生成复杂的对象。在实际开发中,我们可以根据需要选择使用FactoryBean来实现复杂的逻辑。

    简单了解Spring中BeanFactory与FactoryBean的区别

    简单了解Spring中BeanFactory与FactoryBean的...BeanFactory和FactoryBean都是Spring框架中的重要组件,它们提供了不同的功能和机制来管理和生成Bean。理解它们之间的区别对我们使用Spring框架开发应用程序非常重要。

    SpringFactoryBean:spring FactoryBean的样本,在运行时在两个bean之间进行更改

    总的来说,`FactoryBean`提供了一种强大的机制,让开发者能够在Spring容器中实现更灵活的对象创建和控制。通过结合条件判断和策略模式,我们可以轻松地在运行时切换bean,适应不同的业务需求。这个特性在大型复杂...

    spring6pdf详细讲解

    Spring 提供了多种方式来实例化和管理 Bean,包括通过构造方法、简单工厂模式、FactoryBean 等。 Spring 还提供了多种范围的 Bean,包括 singleton、prototype 等。 Spring 的 IoC 容器是框架的核心组件,它负责...

    Spring中BeanFactory与FactoryBean接口的区别详解

    在Spring框架中,BeanFactory和FactoryBean是两个重要的接口,它们各自扮演着不同的角色,但都与Spring容器的管理和创建对象密切相关。...在面试或实际开发中理解这两者的区别对于掌握Spring的核心机制至关重要。

    【Spring】总结Spring整合Mybatis的底层原理实现步骤

    总的来说,Spring整合Mybatis的关键在于利用Spring的IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)特性,以及MyBatis的Mapper接口和FactoryBean机制,实现数据访问层的...

    初探spring aop内部实现 java

    在实际开发中,理解Spring AOP的内部机制有助于我们更好地利用其功能,提高代码的可维护性和扩展性。而DataSource的灵活配置和FactoryBean模式则可以帮助我们实现更高效、可扩展的数据访问层。通过阅读和分析源代码...

    mybatis-spring-1.0.1-bundle.zip

    6. 异常处理:MyBatis-Spring 还将 MyBatis 的异常转换为 Spring 的 DataAccessException,使得开发者可以按照 Spring 的异常处理机制进行统一处理。 总的来说,MyBatis-Spring 1.0.1 版本为开发者提供了一个简洁、...

    factory-bean-demo.7z

    `FactoryBean`是Spring提供的一种强大的扩展机制,它允许我们在Spring容器内部注入自定义的创建逻辑。通过理解`FactoryBean`的工作原理和应用场景,开发者能够更好地定制Spring容器的行为,解决复杂对象创建和管理的...

    Spring实例化Bean顺序

    9. **FactoryBean**:Spring的`FactoryBean`允许自定义Bean的创建方式。`FactoryBean`创建的对象被视为容器中的单个Bean,因此,它的实例化顺序遵循标准规则。 综上所述,Spring Bean的实例化顺序是一个复杂的过程...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.7.3. 使用FactoryBean定制实例化逻辑 3.8. ApplicationContext 3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的...

    mybatis-Spring整合jar包

    4. **MapperFactoryBean**:这个类是MyBatis-Spring提供的,它实现了Spring的FactoryBean接口,可以将Mapper接口实例化为Spring的bean,同时处理与SqlSession的交互。 5. **SqlSessionTemplate**和**...

    mybatis-spring-1.3.2

    2. **MapperFactoryBean**:该类实现了 Spring 的 FactoryBean 接口,用于生成指定类型的 Mapper 对象。通过这个工厂,我们可以在 Spring 容器中直接注入 Mapper 接口。 3. **TransactionAwareExecutor**:这是一个...

Global site tag (gtag.js) - Google Analytics