知识分享:Spring Ioc 实例化 Bean 对象有几种方式?

Spring 实例化 bean 的方式

构造器的方式

静态工厂方式

实例化工厂方式

案例实操

构造器的方式实例化 bean 对象

<beanid="hello"name="hello"class="com.xxx.demo.Hello"></bean>

通过默认构造器创建 空构造方法必须存在 否则创建失败

静态工厂模式

特点:

要有该工厂类及工厂方法

工厂方法是静态的

StaticFactory 静态工厂

/**

* 静态工厂模式

*

*/

publicclassStaticFactory{

    publicstaticGoodsServicecreateGoodsService() {//方法一定要是一个静态方法

        returnnewGoodsService();

    }

}

GoodsService实体类

publicclassGoodsService{

    publicvoidgetGoodsInfo() {

        System.out.println("外星人贼便宜");

    }

}

Bean配置

<beanid="goodsService"

        class="com.xxx.demo.StaticFactory"factory-method="createGoodsService"></bean>

当我们指定Spring使用静态工厂方法来创建Bean实例时,Spring将先解析配置文件,并根据配置文件指定的信息,通过反射调用静态工厂类的静态工厂方法,并将该静态工厂方法的返回值作为Bean实例,在这个过程中,Spring不再负责创建Bean实例,Bean实例是由用户提供的静态工厂方法提供的。

实例化工厂方式创建 Bean

相比较静态工厂实现

1、工厂方法为非静态方法

2、需要配置工厂bean,并在业务bean中配置factory-bean,factory-method属性

实例化工厂定义

/**

* 实例化工厂

* @author Best Liu

*

*/

publicclassInstanceFactory{

    publicOrderServicecreateOrderService() {

        returnnewOrderService();

    }

}

实体类定义

publicclassOrderService{

    publicvoidgetOrderInfo() {

        System.out.println("亲,已经下单完成,但是想发货没门");

    }

}

Bean配置

<!--

    实例化工厂

    1、定义实例化工厂bean

    2、引用工厂bean指定工厂创建方法(方法为非静态)

-->

    <beanid="instanceFactory"class="com.xxx.demo.InstanceFactory"></bean>

    <beanid="orderService"factory-bean="instanceFactory"factory-method="createOrderService"></bean>

扩展

Spring 三种实例化 bean 的方式比较

方式一:通过bean的缺省构造函数创建,当各个bean的业务逻辑相互比较独立的时候或者和外界关联较少的时候可以使用。

方式二:利用静态factory方法创建,可以统一管理各个bean的创建,如各个bean在创建之前需要相同的初始化处理,则可用这个factory方法先进行统一的处理等等。

方式三:利用实例化factory方法创建,即将factory方法也作为了业务bean来控制,

1、可用于集成其他框架的bean创建管理方法

2、能够使bean和factory的角色互换

开发中项目一般使用一种方式实例化bean,项目开发基本采用第一种方式,交给spring托管,使用时直接拿来使用即可,另外两种了解即可。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容