Spring Ioc 实例化 Bean 对象有几种方式?

<input maxlength="100" placeholder="2020-12-25" class="article-bar__title article-bar__title--input text-input"> 28/100

<nav class="navigation-bar clearfix navigation-bar--editor"></nav>

<input id="import-markdown-file-input" accept=".md" type="file" class="hidden-file">

new

<pre class="editor__inner markdown-highlighting" style="padding: 10px 16px 264px;" tabindex="0" contenteditable="true">

Spring Ioc 实例化 Bean 对象有几种方式?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0t3vREVi-1608882022086)(https://imgkr.cn-bj.ufileos.com/50416f44-5b7e-43bb-a0c4-ee71be577c04.jpg)]

Spring 实例化 bean 的方式

  • 构造器的方式 - 静态工厂方式 - 实例化工厂方式

案例实操

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


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

### 静态工厂模式    

特点:    

要有该工厂类及工厂方法    

工厂方法是静态的    

StaticFactory 静态工厂    

~~~ java  /**  * 静态工厂模式  *  */  public class StaticFactory {    public static GoodsService createGoodsService() {//方法一定要是一个静态方法         return new GoodsService();      }  }  ~~~    

GoodsService实体类    

~~~ java  public class GoodsService {   public void getGoodsInfo() {        System.out.println("外星人贼便宜");   }  }  ~~~    

Bean配置    

~~~ xml  <bean id="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属性    

实例化工厂定义    

~~~ java  /**  * 实例化工厂  * @author Best Liu  *  */  public class InstanceFactory {   public OrderService createOrderService() {          return new OrderService();      }  }  ~~~    

实体类定义    

~~~ java  public class OrderService {   public void getOrderInfo() {        System.out.println("亲,已经下单完成,但是想发货没门");     }  }  ~~~    

Bean配置    

~~~ xml  <!--   实例化工厂   1、定义实例化工厂bean   2、引用工厂bean指定工厂创建方法(方法为非静态)  -->     <bean id="instanceFactory" class="com.xxx.demo.InstanceFactory"></bean>     <bean id="orderService" factory-bean="instanceFactory" factory-method="createOrderService"></bean>  ~~~        

## 扩展    

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

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

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

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

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

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

用这个factory方法先进行统一的处理等等。    

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

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

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

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

</pre>

# Spring Ioc 实例化 Bean 对象有几种方式?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0t3vREVi-1608882022086)(https://imgkr.cn-bj.ufileos.com/50416f44-5b7e-43bb-a0c4-ee71be577c04.jpg)]

## Spring 实例化 bean 的方式

*   构造器的方式
*   静态工厂方式
*   实例化工厂方式

## 案例实操

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

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

```

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

### 静态工厂模式

特点:

要有该工厂类及工厂方法

工厂方法是静态的

StaticFactory 静态工厂

```
/**
 * 静态工厂模式
 *
 */
public class StaticFactory {
    public static GoodsService createGoodsService() {//方法一定要是一个静态方法
        return new GoodsService();
    }
}

```

GoodsService实体类

```
public class GoodsService {
    public void getGoodsInfo() {
        System.out.println("外星人贼便宜");
    }
}

```

Bean配置

```
<bean id="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
 *
 */
public class InstanceFactory {
    public OrderService createOrderService() {
        return new OrderService();
    }
}

```

实体类定义

```
public class OrderService {
    public void getOrderInfo() {
        System.out.println("亲,已经下单完成,但是想发货没门");
    }
}

```

Bean配置

```
<!-- 
    实例化工厂 
    1、定义实例化工厂bean
    2、引用工厂bean指定工厂创建方法(方法为非静态)
-->
    <bean id="instanceFactory" class="com.xxx.demo.InstanceFactory"></bean>
    <bean id="orderService" factory-bean="instanceFactory" factory-method="createOrderService"></bean>

```

## 扩展

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

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

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

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

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

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

用这个factory方法先进行统一的处理等等。

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

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

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

**开发中项目一般使用一种方式实例化bean,项目开发基本采用第一种方式,交给spring托管,使用时直接拿来使用即可,另外两种了解即可。**
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,350评论 0 13
  • 夜莺2517阅读 127,761评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,966评论 1 6
  • 我是一名过去式的高三狗,很可悲,在这三年里我没有恋爱,看着同龄的小伙伴们一对儿一对儿的,我的心不好受。怎么说呢,高...
    小娘纸阅读 3,417评论 4 7
  • 那一年,我选择了独立远行,火车带着我在前进的轨道上爬行了超过23个小时; 那一年,我走过泥泞的柏油路,在那个远离故...
    木芽阅读 1,664评论 4 5