`

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 bean的两种工厂方法

    - **注意事项:**使用工厂方法时,Spring容器无法自动检测Bean的类型,因此在进行类型匹配或依赖注入时,需要明确指定Bean的类型。另外,如果工厂方法抛出异常,Spring容器会捕获并处理,导致Bean无法正常创建。 4...

    spring笔记

    * 静态工厂方法初始化(遗留老系统) * 实例工厂方法初始化(遗留老系统) Bean 的作用范围 * 默认情况下,spring 容器管理的 bean 的实例都是单例的 Bean 的生命周期 * Servlet、Filter、Interceptor 等,接口...

    spring 注解注意事项、值的接受传递不同方式

    若需要注入静态字段,可使用初始化方法或者静态工厂方法。 4. 配置类与启动类的区别:在Spring Boot项目中,@Configuration和@SpringBootApplication都是配置类,但用途不同。@Configuration用于传统的XML配置替代...

    Spring @Autowired

    - 不要在静态字段或静态初始化器中使用`@Autowired`,因为静态变量在类加载时就已初始化,而Spring容器是在应用程序启动后才创建Bean。 - 考虑使用`@Qualifier`注解来避免类型冲突,特别是在大型项目中。 - 避免在非...

    SSH框架面试题.pdf

    - `prepare()`: 在执行Action之前被调用,用于初始化Action实例。 - `validate()`: 用于验证请求参数的有效性。 5. **Struts的验证机制是怎样的?** Struts提供了内置的验证机制,允许开发者通过配置文件或代码...

    Java工程师面试宝典

    - **图片上传注意事项**:文件大小限制、格式验证等。 - **商品规格设计**:考虑商品属性、价格等信息的组织方式。 - **跨系统调用实现**:RESTful API、RPC 等。 - **CMS系统设计**:内容管理系统的架构和功能。 - ...

Global site tag (gtag.js) - Google Analytics