| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Spring框架学习记录 1 控制反转 -> 正文阅读 |
|
[Java知识库]Spring框架学习记录 1 控制反转 |
控制反转(IoC)IoC 容器是 Spring 的核心,也可以称为 Spring 容器。较于传统的在程序内部通过 new 来创建对象,Spring 通过 IoC 容器来管理对象的实例化和初始化,以及对象从创建到销毁的整个生命周期。 示例:(1)创建一个 Maven 项目,导入 spring 相关依赖
(2)创建接口 UserDao 以及实现类 UserDaoImple UserDao:
?UserDaoImple:
(3)在 resources 中创建 Spring 配置文件 applicationContext.xml
使用 <bean> 定义一个 bean ,id 为该 bean 的唯一标识,class 为该 bean 对应的类的全限定类名 (4)创建测试类 UserDaoTest 进行测试
通过 ApplicationContext 的 getBean 方法获取指定 id 的 bean 对象 调用该对象的 say 方法进行测试 对于 getBean 方法获取 bean 对象,使用的是该对象的无参构造函数 bean 标签范围配置:使用 scope 指定该 bean 的范围,若不填写 scope ,则默认为 singleton
使用如下代码进行测试
当 scope 为 singleton 时(不填写 scope 默认为 singleton)
可以看出,两次调用 getBean 方法创建对象,在内存中仅有一份 当 scope 为 prototype 时
可以看出,创建了两个 bean 对象 bean 对象创建过程:对于 singleton ,当加载 xml 文件创建 Spring 容器,该对象便自动创建,只要容器在,对象就一直存在,当卸载,销毁容器时,对象被销毁 对于 prototype,加载 xml 文件创建 Spring 容器时并不会创建该对象,而是在调用 getBean 方法时创建,只要对象在使用中,就一直存在,对象长时间不使用,会被GC自动回收 bean 生命周期配置:
在 UserDaoImple 中新增如下两个方法:
在 xml 配置文件中增加配置信息,指定对应的初始化和销毁方法
在该 bean 对象被创建时,便会自动调用指定的初始化方法,在容器关闭后,自动调用销毁方法 需要注意的是,对于销毁方法,是在容器关闭后自动调用的,而容器不维护 prototype 的 bean 对象,故这里使用 singleton 进行测试 测试代码如下:
由于 ApplicationContext 中没有关闭容器的方法 close ,故将 app 强转为 ClassPathXmlApplicationContext ,也可以直接以 ClassPathXmlApplicationContext 进行创建,如下:
成功调用了初始化和销毁方法 bean 实例化的三种方式:(1)无参构造方法实例化 前面的示例均为无参构造方法进行 bean 的实例化,故不再赘述 (2)工厂静态方法实例化 创建静态工厂 StaticFactory
在 xml 配置文件中用 class 属性指定对应的工厂,并用 factory-method 指定对应的工厂方法
对于静态工厂,不需要创建工厂对象,只需直接调用工厂提供的方法即可创建 bean 对象? (3)工厂实例方法实例化 对于非静态工厂,需要先创建工厂对象,再调用工厂对象的方法创建 bean 对象 非静态工厂 DynamicFactory
在 xml 配置文件中首先配置工厂对象,然后用 factory-bean 指定工厂对象,用 factory-method 指定该工厂对象的创建 bean 对象的方法,最终得到需要的 bean 对象
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 17:19:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |