目录
IOC控制反转:
IOC是Spring的核心之一,作用就是为了解耦,降低程序,代码之间的耦合度
eg: dao层中有UserDao接口,dao.impl下有UserDaoImpl的实例对象(ioc方式)
service层有UserService接口,service.impl下有UserServiceImpl实例对象(ioc方式)
创建Spring的核心配置文件,如图:
bean 标签: 用于配置类,托管类,其实就是让spring创建这个类的对象
id : 唯一标识,根据这个标识向spring调用这个类的对象
class : 类的全路径,需要创建类对象的这个类的全路径
bean标签:
用于配置,将对象交给spring进行控制,spring会帮我们创建对象
默认(singleton,单例)情况下spring是调用类的无参构造来创建对象的,如果没有无参构造会报错
(prototype)多例,一个spring容器里面有多个该bean对象
-
不同scope的bean,生命周期:
-
singleton:bean的生命周期和Spring容器的生命周期相同
-
整个Spring容器中,只有一个bean对象,问工厂要多少次对象,永远都是同一个
-
何时创建:加载Spring配置文件,初始化Spring容器时,bean对象创建(只要创建工厂,就会创建这个对象!)
-
何时销毁:Spring容器销毁时,bean对象销毁
-
-
prototype:bean的生命周期和Spring容器无关。Spring创建bean对象之后,交给JVM管理了
-
整个Spring容器中,会创建多个bean对象,创建之后由JVM管理(每次问工厂要对象,得到的都是新的对象)
-
何时创建:调用
getBean
方法获取bean对象时,bean对象创建(问工厂要对象的时候就创建对象) -
何时销毁:对象长时间不用时,垃圾回收
-
-
依赖注入DI:
托管类里面有什么属性需要完成赋值工作,把这个赋值的工作交给spring来做。由spring把属性需要用到的值赋值(注入)进来就称之为依赖注入。
有接口,有实现类,定义一个属性,并给属性提供一个set方法
在托管|登记类的时候,要添加property标签。如果注入的是对象,那么要使用ref属性,如果注入的是普通的数据,那么要使用value属性
三种常见的注入方式:
set方式注入: 常用
在类中提供需要注入的成员(依赖项)的set方法,在配置文件中注入属性的值
<bean id=" " class=" ">
<property name="属性名" value="属性值"></property>
<property name="属性名" ref="bean的id"></property>
</bean>
-
property
标签:用在bean标签内部,表示要给某一属性注入数据-
name
:属性名称 -
value
:要注入的属性值,注入简单类型值 -
ref
:要注入的属性值,注入其它bean对象
-
构造方法注入:
在类中提供构造方法,构造方法的每个参数就是一个依赖项,通过构造方法给依赖项注入值。
<bean id="" class="">
<constructor-arg name="构造参数名称" value="构造参数的值"></constructor-arg>
<constructor-arg name="构造参数名称" ref="bean的id"></constructor-arg>
</bean>
-
name
:构造参数的名称 -
type
:构造参数的类型 -
index
:构造参数的索引 -
value
:要注入的值,注入简单类型值 -
ref
:要注入的值,注入其它bean对象
p名称空间注入: 本质仍然是set方式注入
在xml中引入p名称空间的约束, 然后通过`p:属性名称=""`来注入简单数据、使用`p:属性名称-ref=""`注入其它bean对象,它的本质仍然是set方法注入
<bean id=" " class=" " p:属性名="简单值" p:属性名-ref="bean的id"></bean>
普通属性注入: p:属性名="属性值"
对象属性注入: p:属性名-ref="bean的id值"