Spring IoC(Spring Inversion of Control):控制反转,一种编程思想。我理解就是把管理对象的权力,由直接通过程序变为通过Spring容器,如此统一的来管理对象和对象间的关系
DI(Dependency Injection):依赖注入,Spring通过DI,实现了IoC
1.通过Spring来创建对象
- 通过对象的构造方法
<bean class="" id="">
- 通过静态工厂方法
<bean class="" factory-method="" id="">
- 通过实例工厂方法
<bean factory-bean="" factory-method="" id="">
2.获取Spring创建的对象
通过Spring的容器工厂类来获取对象
- 项目目录下加载:ClassPathXmlApplicationContext
- 文件目录下加载:FileSystemXmlApplicationContext
3.Bean的作用域
以下均为< bean >的属性和值
- scope=“singleton”:默认值,容器里只有一个实例(单例)
- scope=“prototype”:容器里可以有多个实例
- scope=“request”:每次HTTP请求都会创建一个新的Bean
- scope=“session”:同一个HTTP Session共享一个Bean
- scope=“application”:限定一个Bean的作用域为ServletContext的生命周期
4.Bean的生命周期
- 实例化 -> 属性赋值 -> 初始化 -> 销毁
- 相关的配置(以下均为< bean >的属性,属性值为该bean实例里对应的方法)
init-method:在容器创建bean之后自动调用。
destroy-method:在容器关闭时自动调用。只对单例的bean有效。
lazy-init:在容器创建时并不创建bean,而是在获取bean时才创建,只对单例的bean有效。
5.依赖注入的方式
- setter注入:通过bean的set方法
<bean...>
<property name="age" value="xxx"/>
</bean>
- 构造器注入:通过bean的构造方法
<bean...>
<constructor-arg index="0" value="xxx"/><constructor-arg index="1" value="xxx"/>
</bean>
- 自动装配:从容器中找到匹配的bean,设置给这个bean的属性。
<!--根据类型:即bean的class 类所在包名 -->
<bean... autowire="byType"></bean>
<!--根据名称:即bean的id -->
<bean... autowire="byName"></bean>
6.可被注入的类型
- 基本类型
<property name="age" value="22"/>
- 其他bean
<property name="age" ref="xxx"/>
- 集合:比如List、Set、Map
<property name="xxx">
<list>
<value> </value>
<value> </value>
<value> </value>
</list>
</property>
<property name="xxx">
<map>
<entry key="" value=""/>
<entry key="" value=""/>
</map>
</property>
- 使用spring表达式来访问其它bean的属性#{}
spring表达式:#{}
<property name="ename" value="#{msg.name}"/>