Spring工厂模式:控制bean实例与自定义工厂
需积分: 9 135 浏览量
更新于2024-07-19
收藏 1.96MB DOCX 举报
本文档主要介绍了在Spring框架中使用工厂模式来管理Bean的实例化过程,以及如何通过`ApplicationContext`来获取和配置Bean。首先,我们关注的是Spring工厂的两种实现方式:
1. 静态工厂方法:
在XML配置文件中,如`beans.xml`,使用`<bean>`标签定义一个名为`demoDao`的Bean,并指定其类(假设为`com.linhaol.example.DemoDao`)。为了通过工厂方法创建该Bean,`<bean>`标签的`factory-method`属性被设置为自定义的工厂方法名,这里为`createBean()`。这个方法在`MyBeanFactory`类中定义,该类提供了静态的创建Bean实例的方法。
```xml
<bean id="demoDao" class="com.linhaol.example.DemoDao" factory-method="createBean"/>
```
2. 实例化使用自定义工厂类:
`MyBeanFactory`类既是普通的Java类,也是一个工厂类,它有一个构造器和静态方法`createBean()`。在XML配置中,`<bean>`标签不仅指定类名,还指定了`factory-bean`属性为`myBeanFactory`,`factory-method`属性为`createBean`,这样Spring会自动调用`MyBeanFactory`的相应方法来创建Bean。
```xml
<bean id="bean" factory-bean="myBeanFactory" factory-method="createBean"/>
```
接着,文档展示了如何在测试代码中使用`ApplicationContext`来获取配置好的Bean。`demo02`方法中,通过`ClassPathXmlApplicationContext`加载XML配置文件,然后通过`getBean`方法根据ID获取Bean实例。例如,通过`applicationContext.getBean("bean")`获取到的是`MyBeanFactory`的`createBean()`方法返回的`Bean`实例,并执行`addBook()`方法。
最后,提到Bean的作用域默认为`singleton`,这意味着每次请求都会返回同一个Bean实例。如果希望每个请求得到一个新的实例,可以将`scope`属性设置为`prototype`,如`<bean id="bean" class="com.linhao.example.Bean" scope="prototype"></bean>`。
总结起来,本篇文章重点讲解了Spring框架中如何通过工厂方法(静态或自定义工厂类)管理Bean的生命周期,并展示了如何在测试代码中正确使用`ApplicationContext`来获取Bean及其配置。同时,对Bean作用域的概念也进行了简要说明。
1283 浏览量
393 浏览量
3008 浏览量
2010-03-07 上传
265 浏览量
2021-04-01 上传
POC199
- 粉丝: 7
- 资源: 2
最新资源
- Gdal 2.2.2 for .Net And .NetCore
- 微生物肥料项目计划书.zip
- mhygepdf:多元超几何概率密度函数。-matlab开发
- 寄存器查看工具,十六进制,十进制显示二进制值
- EchartConvert:图表生成
- gestionStudent
- Typersion:最好的打字练习游戏! 在免费游戏和冒险模式之间进行选择,后者是一种rpg式的砍杀模式,目标是达到第100阶段! 每五个阶段都会受到迷你小老板的挑战,在您面对越来越强的敌人时提高打字速度!
- 联体别墅设计施工图
- CUDA MEX:在 MATLAB 中编译 CUDA! 只需编写 cuda_mex filename.cu 就可以了。-matlab开发
- redisclient-win32.x86.2.0.rar
- PRNICT:硬件
- Platzi徽章
- MySQL-python-1.2.5-cp27-none-win-amd64.whl的zip安装包
- 两款css+html打造的超炫酷的网站在线客服代码,鼠标划过可以弹出在线客服窗口
- SDL2 i.MX6ULL移植包
- 基于vue2.0实现的滑动进度条