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 托管,应用时间接拿来应用即可,另外两种理解即可。