spring 用静态工厂方法初始化bean的注意事项

如下

<bean id="sockIOPool4BIP" class="com.danga.MemCached.SockIOPool"
		factory-method="getInstance" init-method="initialize" destroy-method="shutDown"
		p:initConn="${sockIOPool.initConn}" p:minConn="${sockIOPool.minConn}"
		p:maxConn="${sockIOPool.maxConn}" p:maintSleep="${sockIOPool.maintSleep}"
		p:nagle="${sockIOPool.nagle}" p:socketTO="${sockIOPool.socketTO}"
		p:servers="${sockIOPool.servers}" p:hashingAlg="${sockIOPool.hashingAlg}">
		<constructor-arg value="${memcachedClient.instance}" />
	</bean>

 

 1.class属性的值不再是Bean实例的实现类,而是生成Bean实例的静态工厂类。(实际情况这也可能是同一个类,如上所示)。

2.使用factory-method属性指定生产bean实例的静态工厂方法。

3.如果静态工厂方法需要参数,使用<constructor-arg .../>元素指定静态工厂方法的参数,此时<constructor-arg .../>就不再是类的构造函数的参数了。

 

      当指定spring用静态工厂方法创建bean实例的时候,spring 会根据配置文件,找到对应的静态工厂类,运用反射,调用静态工厂方法,把返回的结果作为bean实例。在这个过程中,其实spring不负责创建bean实例,而是由用户提供的静态工厂类负责创建的。

       但创建Bean实例后,spring依然可以管理bean实例的依赖关闭,包括其注入所需的依赖关系和生命周期等。

 详细参考:

http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-class-static-factory-method
http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-properties-detailed

 

 

 

 

你可能感兴趣的:(spring)