一、spring介绍
1、spring的概念、特点
spring是一个分层的开源的轻量级框架,实际上是一个存放对象的容器,核心是控制反转(IoC)、面向切面(AOP),多有对象的创建和依赖关系的维护都交给spring来管理,不用再自己创建和维护;
2、准备工作:
导入jar包,导入约束
3、注册对象到容器中
4、IoC思想:涉及到DI(依赖注入技术)和IoC思想,IOC思想的实现要依赖于DI技术
5、两个接口的对比
BeanFactory接口(顶层接口,其实现类的功能单一,已过时,在资源匮乏的时候会使用,因为他只有在每次获得对象的时候才创建对象);
ApplicationContext接口(继承于BeanFactory接口,实现类的功能较多,特点是:每次容器启动时,就会创建容器中配置的所有对象,获取对象时,直接在里边取即可);
6、spring简单配置
(1)Bean元素(配置文件xml的根元素)的配置:将对象交给spring来管理,用Bean元素来描述需要spring管理的那些对象,如下图:
然后,比如在测试类里需要获取对象时,可以:
7、spring创建对象的三种方式
(1)空参构造方式:上述6里边的图片,创建一个User类,在xml里配置name,class属性后,通过User的空参构造方法来创建对象user;
(2)静态工厂方式:首先创建一个UserFactory(工厂类),类里边定义一个静态的方法(因此叫静态工厂方式),获得User的对象user:
(3)动态实例化方式:将上述UserFactory(工厂类)里的静态方法换为非静态的方法,这时候,xml里的配置有些变化:如下是(2)(3)两种方式的不同配置方式:
可以看到,(3)中由于工厂方法是非静态的,所以配置的时候需要先配置,创建UserFactory的实例化对象,再用该对象调用createUser2()方法,获取user对象;
其中多了一个factory-bean属性,切记;
结论:(1)用得最多,(2)(3)基本不用,了解即可;
二、spring配置详解(进阶)
1、<bean></bean>里边的scope属性;
常见的四种属性值:
(1)singleton(单例),这是默认的,不写的话,默认创建的是单例对象;
User u1 = ac.getBean("user");
User u2 = ac.getBean("user");,这里u1和u2是同一个对象,打印(u1==u2)时返回true;并且只调用了一次空参构造方法;
(2)prototype(多例),每次创建时都会调用一次空参构造,且每次创建的都是不同对象;
(3)request:web环境下,对象与request生命周期一致;(了解,即使在web环境下也基本不用);
(4)session:web环境下,对象与session生命周期一致;(了解,即使在web环境下也基本不用);
结论:(1)(2)比较常用,以后开发中大部分使用(1)单例模式;(2)在struts2中使用,在struts2中,根据struts2架构的设计,action对象每次获取时必须是一个新的对象交给spring来管理,所以action必须设置为prototype(多例)。