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的角色调换

开发中我的项目个别应用一种形式实例化bean,我的项目开发根本采纳第一种形式,交给spring托管,应用时间接拿来应用即可,另外两种理解即可。