Spring框架的引言
Spring是集众多设计模式于一身的开源、轻量级的项目管理框架,主要用于对项目中组件对象的创建、使用和销毁
Spring核心思想是IOC和DI
IOC
Inversion Of Controll 控制反转,指的是控制权力的反转,具体是指将原来项目中手工通过new关键字创建对象的权力交给Spring(工厂),工厂创建对象;
DI
Dependcy Injection 依赖注入
语法:将所需对象声明为成员变量并提供set方法,同时在工厂配置文件中使用property标签完成属性的注入;
IOC和DI的概念:
将原有项目中通过new关键字创建对象的权力交给Spring,由工厂去创建对象,Spring矿建不仅要创建对象,还要在创建对象的同时去维护类与类之间的依赖关系(组件与组件的依赖关系),因此在IOC的基础上提出ID的概念。
Spring的三种注入方式
1.set注入
语法:需要谁将谁声明为成员变量,提供set方法,在配置文件中进行注入
注入细节:使用property标签
注意:八种基本类型+String+Date使用value属性注入
对象类型引用类型使用ref注入
数组使用array、list使用list
set使用set
map使用map
properties使用props
2.构造注入
语法:依赖组件声明为成员变量并提供构造方法
注入细节:使用<constructor-arg name="注入参数变量名" index="参数编码在构造方法中的下标">
3.自动注入
语法:一脸组件声明为成员变量,并提供set方法
诸如细节:<bean id="" class="" autowired="byName | byType">
byName:成员变量名与工厂中bean的id一致则进行注入,找不到则不注入
byType: 成员变量的类型与工厂中bean的类型一致则注入,不同则不注入
注意:当多个bean的类型一致时使用byType注入会报错
Spring工厂细节
1.默认spring工厂在管理组件对象创建时,默认创建的是单例,默认配置如下:
<bean id="xxx" class ="xxx"></bean>
如果要修改为多例,可增加‘scope’属性。
scope属性值: singleton: 单例 多用于dao和service prototype:多例,多用于action
2.spring工厂原理
反射+无参构造方法,解析xml:
Class<UserDao> forName = (Class<UserDao>) Class.forName("dao.UserDaoImpl");
UserDao newInstance = forName.Instance();
newInstance.save();
3.bean的生命周期
单例bean生命周期:工厂启用,单例bean随之创建,工厂正常关闭,则所有单例bean随之销毁;
多例bean生命周期:每次调用时创建,工厂只负责创建,销毁交给JVM;
Spring工厂创建对象的好处
- 使用配置文件管理java类,在生产环境中变换类的实现时不再需要重新部署,修改文件即可;
- spring默认使用单例模式创建bean,减少内存的占用;
- 通过依赖注入建立了类与类之间的关系(使java之间关系更为清晰,方便了维护和管理)