基本概念在此不进行赘述,干货如下:
Spring是分层的Java SE/EE应用轻量级(跟EJB比)开源框架,以Ioc(控制反转,解耦合),和AOP(面向切面编程,底层是动态代理)为内核
IOC:是控制反转,反转的是创建对象的控制权,将控制权交给框架,降低了程序之间的耦合性
AOP:在不修改源码的情况下进行功能增强,通过动态代理实现的
基于xml配置文件注入Bean对象
bean标签:
id:唯一标识
class:bean的全限定类名
name:类似id是该bean对象的标识,但是name可以有多个,id只能唯一,多个name用","隔开
scope:singleton(默认的,单例,标识Spring容器中只有一个该对象)
prototype(多例,表示该Spring容器中有多个该Bean对象)
request(web项目里,Spring创建的bean对象将放到request域中:一次请求期间有效 )
session(web项目里,Spring创建的bean对象将放到session域中:一次会话期间有效 )
不同的scope的bean,生命周期不同:
singleton:bean的生命周期和Spring容器的生命周期相同
整个Spring容器中,只有一个bean对象
何时创建:加载Spring配置文件,初始化Spring容器时,bean对象创建
何时销毁:Spring容器销毁时,bean对象销毁
prototype:bean的生命周期和Spring容器无关。Spring创建bean对象之后,交给JVM管理了
整个Spring容器中,会创建多个bean对象,创建之后由JVM管理
何时创建:调用getBean方法获取bean对象时,bean对象创建
何时销毁:对象长时间不用时,垃圾回收
init-method:指定类中初始化方法名称,该方法将在bean对象被创建时执行
destroy-method:指定类中销毁方法名称,该方法将在bean对象被销毁时执行
小结:
让Spring帮我们创建class对应的实例对象,我们可以通过id获取到这个实例对
-
scope:bean对象的作用范围
-
singleton:默认值,表示单例的
-
何时创建:非懒加载的bean,在容器初始化时就创建对象;懒加载的bean,在第一次获取时创建对象
-
何时销毁:容器关闭时,销毁bean对象
-
-
prototype:多例的
-
何时创建:每次获取时都会创建新对象
-
何时销毁:长时间不使用,JVM垃圾回收
-
-
-
init-method:指定一个初始化方法
在Spring创建bean对象之后,会自动执行一次初始化方法
-
destroy-method:指定一个销毁方法
在Spring容器关闭之前(bean对象被销毁之前),会自动执行一次销毁方法
注意:多例的bean对象销毁时,不执行销毁方法
依赖注入:
上面这段代码的即在Service中依赖dao层也就是数据层,可以理解成Service依赖Dao层,所以Service中注入了Dao层的Bean对象。
常见的注入方式:
set方法注入:在类中提供需要注入的成员(依赖项)的set方法,在配置文件中注入属性的值
构造方法注入:在类中提供构造方法,构造方法的每个参数就是一个依赖项,通过构造方法给依赖项注入值。
constructor-arg标签的属性:
-
name:构造参数的名称
-
type:构造参数的类型
-
index:构造参数的索引
-
value:要注入的值,注入简单类型值
-
ref:要注入的值,注入其它bean对象
P名称空间注入:本质依然是set注入
然后通过p:属性名称=""来注入简单数据、使用p:属性名称-ref=""注入其它bean对象,它的本质仍然是set方法注入
集合注入数据
纯个人手打,有错误地方欢迎指正



