如下
<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 的 @Order 注解来指定 bean 的初始化顺序,也可以使用 Spring 的生命周期接口(如 InitializingBean)来控制 bean 的初始化顺序。 总结 控制 2 个 bean 的初始化顺序是一个常见的问题,本篇...
在Spring框架中,Bean的创建和初始化是IoC(Inversion of Control)容器的核心功能,这一过程涉及到多个步骤。以下是对Spring Bean创建初始化流程的详细解释: 1. **初始化ApplicationContext**: 开始时,通过`...
- **注意事项:**使用工厂方法时,Spring容器无法自动检测Bean的类型,因此在进行类型匹配或依赖注入时,需要明确指定Bean的类型。另外,如果工厂方法抛出异常,Spring容器会捕获并处理,导致Bean无法正常创建。 4...
2. 使用`@PostConstruct`注解:该注解可以标记在初始化方法上,Spring会在所有依赖注入完成后调用该方法。这种方式更推荐,因为它具有更好的可读性和语义性。 3. 配置`init-method`:在Bean的定义中,可以使用`init...
下面将详细介绍如何通过不同方式定义Spring Bean的初始化和销毁回调方法。 **初始化回调方法** 1. **@PostConstruct注解** 这个Java标准注解用于标记一个方法,该方法将在对象完全构造后但在业务逻辑执行前被调用...
在Spring框架中,静态工厂方法是一种创建Bean对象的方式,它允许我们通过调用类中的静态方法来实例化对象,而不是直接使用new关键字。这种方式在某些特定场景下非常有用,例如当我们需要控制对象的创建过程或者对象...
初始化后可访问Spring管理的Bean
5. **Bean的生命周期管理**:Spring提供了预初始化、初始化、后初始化等一系列回调接口(如`InitializingBean`和自定义的初始化方法),使得开发者可以在Bean的生命周期中插入自定义逻辑。 总的来说,Spring容器对...
在Spring框架中,我们可以使用多种方式来控制Bean的初始化和销毁,以下就Spring Bean的初始化和销毁进行详细的讲解。 一、Bean的初始化 在Spring框架中,我们可以使用多种方式来初始化Bean,下面我们将介绍两种...
静态工厂方法的优势在于可以隐藏具体的实现细节,例如,它可以在工厂方法内部执行一些额外的初始化操作,或者返回一个已经缓存的对象。但是,这种方法不支持依赖注入,因为Spring无法在调用静态方法时传递参数。 接...
6. **@PostConstruct注解**:标记在方法上的`@PostConstruct`注解表示该方法应在Bean完全初始化后立即调用。Spring将这些方法的调用顺序与Bean的实例化顺序一致。 7. **@PreDestroy注解**:与`@PostConstruct`相对...
在Spring中,我们可以配置Bean定义来指定使用静态工厂方法创建对象。这需要在配置文件(如XML)中提供以下信息: 1. `class`属性:虽然这个属性通常用于指定类的全限定名,但在使用静态工厂时,它实际上是用于指定...
本文将深入探讨Spring中实例化Bean的三种主要方式:构造器注入、静态工厂方法注入以及实例工厂方法注入。 #### 1. 构造器注入(Constructor Injection) 构造器注入是指通过调用Bean类的构造器来创建Bean实例。...
综上所述,Spring Bean重复执行两次的问题通常是由于配置错误、依赖注入循环、初始化回调的不当使用、静态工厂方法的误用、AOP代理的配置问题或是Bean作用域设置不准确导致的。通过仔细检查和修正这些问题,可以避免...
Spring 框架中提供了两种方式来实例化 bean,分别是静态工厂方法和实例工厂方法。下面我们将详细介绍这两种方法的实现和使用。 一、静态工厂方法 静态工厂方法是通过调用静态方法来返回 bean 实例的方式。这种方式...
调用实例工厂方法创建bean,与调用静态工厂方法创建bean 的用法基本相似。 区别如下: ·调用实例工厂方法创建bean 时,必须将实例工厂配置成bean 实例。 而静态工厂方法则无须配置工厂bean。 ·调用实例工厂方法...
我们还可以在XML配置中定义Bean的初始化方法(`init-method`)和销毁方法(`destroy-method`),Spring容器会在适当的时间调用这些方法。 9. **Spring容器的启动与Bean的生命周期**: 一旦XML配置加载到Spring...
- **初始化回调**:Spring支持两种类型的初始化回调方法,即`@PostConstruct`注解的方法和在XML中定义的`init-method`属性指定的方法。 2. **容器管理的生命周期回调** - **Singleton Beans的懒加载**:如果Bean...
在本篇文章中,我们将深入探讨Spring源码中关于Bean初始化的过程,特别是`finishBeanFactoryInitialization()`方法和`preInstantiateSingletons()`方法。 首先,`finishBeanFactoryInitialization(Confi...