一起学习设计模式——单例和工厂

Spring中设计模式

Spring中的设计模式有好几种,在此主介绍单例模式和工厂模式。

单例模式

因为Spring依赖注入Bean默认是单例的。Spring的依赖注入都是发生在AbstractBeanFactory的getBean里。getBean的doGetBean方法调用getSingleton进行bean的创建。

getSingleton过程图:
在这里插入图片描述
总结
单例模式定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
spring对单例的实现:spring中的单例模式提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例,这是因为spring管理的是任意的java对象。

工厂模式

实现方式:FactoryBean接口
实现原理:实现了FactoryBean接口的bean是一类叫做factory的bean。其特点是,spring会在使用getBean()调用获得该bean时,会自动调用该bean的getObject()方法,所以返回的不是factory这个bean,而是这个bean.getOjbect()方法的返回值。

例子:spring和Mybatis结合的工厂模式

<!-- 配置SqlSessionFactoryBean -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<!-- 事务 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 配置Mapper映射文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
</bean>

说明:从以上看出该bean,因为实现了FactoryBean接口,所以返回的不是 SqlSessionFactoryBean 的实例,而是它的SqlSessionFactoryBean.getObject() 的返回值。

Spring对象生命周期

  • scope=“singleton” 容器级别 -> 单例模式:节约资源开销
  • scope=“prototype” 对象级别
  • scope=“request” 请求级别
  • scope=“session” 会话级别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值