IOC: 控制反转
思想大白话: 把创建对象的权利交给spring了
底层技术支持: 工厂+反射+配置文件 (spring都封装好了)
解决的问题: 解耦合
spring的环境搭建:
1 导包:
beans core context expression
spring在运行的过程中 会加载一个日志包
commons-logging.jar 提供了日志功能 但是企业不用它记录日志
apache--log4j.jar 企业开发用的最多的是它记录日志
log4j.properties
spring在加载的过程中会加载commons-logging.jar日志包
commons-logging.jar日志包的内部会看有没有apache--log4j.jar包
如果有 就是用commons-log4j.jar功能来记录日志
如果没有 就使用自己的
2 创建一个类
3 在src下面有一个配置文件 建议用: applicationContext.xml
所有约束都抽出来放在一个html文件中
/spring-framework-4.2.4.RELEASE/docs/spring-framework-reference/html/xsd-configuration.html
4 测试
三: ioc的配置文件内容
bean标签: 指定要实例化的对象
id属性: 唯一标识 可以为任意值 但是整个xml唯一
class属性: 类的全限定名 就是通过它反射该类的实例对象
scope属性: 范围
重点:
singleton: 单实例 默认值
配置文件只要一加载 就会创建该实例对象 放在spring容器中 (Map<user,实例对象>)
注意:只创建一次
当每个人过来要的时候(getBean("user")) 从spring容器中获取的都是同一个实例对象
prototype: 多实例
配置文件只要一加载 不创建该实例对象
当所有人过来要的时候(getBean("user")) 才创建该实例对象 放在spring容器中
注意:获取一次 创建一次 放在spring容器中
了解:
init-method属性: 指定初始化的方法
destory-method属性:指定销毁的方法
singleton:
初始化:配置文件加载的时候 创建对象并且初始化
销毁:容器销毁 对象跟着销毁
prototype:
初始化:当getbean()的时候 创建对象并且初始化
销毁: 长时间不用 java垃圾回收自动回收
import标签:导入外部的配置文件
resource属性:外部配置文件的地址
bean的三种创建方式
1 无参构造器创建 (掌握) 99%
<bean id="user" class="cn.itcast.demo02.CarImpl"></bean>
条件:需要先有个工厂
2 静态工厂创建 (了解)
<bean id="user" class="cn.itcast.demo02.BeanFactory" factory-method="createCar"></bean>
3 实例工厂创建 (了解)
<bean id="factory" class="cn.itcast.demo02.BeanFactory"></bean>
<bean id="user" factory-bean="factory" factory-method="createCar2"></bean>