一 Spring概念
1 优点
1.1 一站式(full-stack)轻量级的开源框架
轻量级:可以更合理的分配资源,使用最合适最小的资源完成当前需求
一站式:可以对dao、service、web层都提供支持
1.2 两大核心功能:
a. IOC (Inverse Of Control)
把创建对象的权利交给Spring,以被动接受的方式获取对象的思想
步骤一:通过读取配置文件来反射创建对象
步骤二:将所有创建的对象存到Map中,方便使用时获取
这个Map称为容器,也可以用List来代替,但是Map更方便查找
避免了 new ,实现了程序间解耦,提高运行效率,减小服务器压力
b. AOP (Aspect Oriented Programming)
1.3 能够整合各种第三方框架
1.4 解耦,简化开发,避免硬编码,将对象间的依赖关系交由Spring进行控制。
什么叫解耦?
编译时不依赖,运行时依赖。
解决方法:
第一种: 利用反射
第二种: 提供配置文件,用工厂来生产对象
1.5 AOP编程
1.6 声明式事务
2 BeanFactory 和 ApplicationContext 的区别
2.1 BeanFactory 是 Spring 容器中的顶层接口且对象只在使用的时候才会创建
2.2 ApplicationContext
是BeanFactory的子接口只要一读取配置文件,默认创建对象。
其实现类:
a. ClassPathXmlApplicationContext
从类的根路径下架在配置文件(通常使用)
b. FileSystemXmlApplicationContext
从磁盘路径上加载配置文件,文件可以在磁盘任意位置
c. AnnotationConfigApplicaionContext
使用注解配置容器对象时,用该类创建Spring容器。读取注解
3 bean 标签
3.1 作用
提供配置给spring创建对象,默认调用类中的无参构造。
3.2 属性
id : 对象在容器中的唯一标识
class : 类的全限定类名,用来反射创建对象
scope : 对象的作用范围
· singleton 默认值,单例
作用范围:
一个应用只有一个对象的实例,作用范围时整个引用
生命周期:
对象出生—应用加载,创建容器时
对象生存—容器在就一直存活
对象销毁—应用卸载,销毁容器时
· prototype 多例
作用范围:
每次访问对象时,都会重新创建对象实例
生命周期:
对象出生—使用对象时
对象生存—只要对象在使用就一直存活
对象销毁—对象长时间不使用时,被GC回收
·factory-method 指定生产对象的方法
· request web项目,将spring创建的对象存入request中
`session web项目,将spring创建的对象存入session中
`·global session web项目,在Portlet环境中应用,如没有,相当于session
·init-method 指定类中的初始化方法名称
·destrory-method 指定累中销毁方法名称
3.3 bean 实例化的三种方式
1) 默认使用无参构造
2)spring管理静态工厂
3)spring管理实例工厂
4 依赖注入(DI Dependency Injection)
4.1 概念
A is B : A 实现了 B 或者 A 继承了 B ,即 A 就是 B
A has B : A 的对象中有一个私有属性B , 就是A 依赖 B
依赖注入就是给对象中的属性赋值。常用的方式由set注入和构造方法注入。
4.2 set方法注入
如果是自己写的类,或者简单属性可以直接赋值,但是如果属性是框架中的,
就无法直接赋值,只能通过自己或者spring调用set方法来赋值。
spring 中使用<bean>下的<property name=”” value=””> 来为属性赋值
4.3 构造方法注入
spring 中使用<bean>下的<constructor-arg name=”” value=””> 来为属性赋值,
类中需要提供一个对相应参数的构造函数
4.4 P名称命名空间注入
本质调用set方法,基本不用
4.5 注入集合属性
String[] arg :
<property name=”…”>
<array>
<value>…</value>
</array>
</property>
Set<?>
<property name=”…”>
<set>
<value>…</value>
</set>
</property>
List<?>
<property name=”…”>
<list>
<value>…</value>
</list>
</property>
Map<?,?>
<property name=”…”>
<map>
<entry key=”…” value=”…”></entry >
<entry key=”…” >…</entry >
</map>
</property>
Properties
<property name=”…”>
<props>
<prop key=”…”>…</prop>
</props>
</property>