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

本文详细介绍了Spring框架中实例化bean的三种方式:构造器实例化、静态工厂方法和实例化工厂方法。通过具体的代码示例展示了如何配置和使用这些方式,强调了每种方式的特点和适用场景。在实际开发中,通常首选通过bean的默认构造函数让Spring托管bean,以简化管理。
摘要由CSDN通过智能技术生成

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托管,使用时直接拿来使用即可,另外两种了(乐字节授权)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值