Web:Struts2+JSP技术
Service:Spring
Dao层:Hibernate5
Spring:项目中对象的容器,Spring用于管理项目中的所有对象
Spring是一栈式框架,当Spring中放置了可以进行某种功能的对象时,就说Spring具有某种功能了。
简单地说,Spring是一个分层的一栈式轻量级开源框架。
1.导包:将官方压缩包解压后,从libs目录中拷贝Beans、Context、Core &表现的英文单词(E开头)的包,以及第三方的Spring声明支持的日志包。(4+2)
2. 准备对象:
定义一个实体类。比如,User类
3. 准备Spring配置文件:文件名applicationContext.xml
导入约束:
(1)添加 xsi 即w3的schema约束
(2)从Spring解压目录的schema目录下的beans中选取版本约束。
配置:
将User对象交给Spring容器
Bean标签:name属性(起名)、class属性(User的全限定名)
4. 可以书写测试代码 Junit 4 了。
IOC&DI:
Inverse Of Control:控制反转
不使用spring时,对象是由开发人员new生成的
使用了Spring之后,对象由Spring帮我们创建出来
使用了Spring之后,对象的创建方式被反转了。由开发人员创建反转为 由机器(Spring)创建
DI:Dependency Injection 依赖注入
依赖注入是一种技术。
IOC的实现需要 DI技术作支持
依赖注入有两种方式:
set方法注入(常用) &
构造方法注入
ApplicationContext容器&BeanFactory容器:
1. BeanFactory是applicationContext的父级接口
2. 功能上ApplicationContext更加强大
3. BeanFactory接口的容器在管理对象时,容器创建时不会创建任何对象,
当需要从容器中获取对象时,才会创建对象
4. ApplicationContext接口的容器,则会在创建容器时,创建所有容器中的对象
基本配置:
Bean标签:
class属性:对象的完整类名。Spring根据完整类名反射得到对象
name属性:给Spring管理的对象起个名字,在通过容器获取对象时,根据名字获得对象
id属性:与name属性大致类似;
区别:
id先出现,唯一、为空、不能使用特殊字符,同一个配置文件下,只能有一个id;不同配置文件下,后加 载的会覆盖前加载;
name属性非空。方便同 struts1整合
scope属性:指定对象在容器中的作用域,一共5个,说法4个,实际只会用到前2个 ↓
singleton(默认):单例模式。容器创建时创建单例对象
prototype:原型多例。获取多例对象时才创建多例对象,每次都是不同的对象。多例对象也不会放进容器 中管理。Spring只负责创建。
request
session
globalSession
init-method&destroy-method属性:分别指定对象创建后和销毁前的方法
注:销毁方法只在scope为singleton时能看到
Spring创建对象方式:
构造方法创建(常用):
图666666
静态工厂创建:
图666666
动态工厂创建:
图666666
Spring分模块配置:
import引入另外的配置文件,resource="全限定名"
依赖注入:属性
构造方法注入:
图666666
set方法注入:
property标签:
图666666
p名称空间注入:
准备工作:在根元素中加入属性 xmlns:p="http://www.springframework.org/schema/p"
图666666
SPEL表达式:可以在配置中引用其他Bean的属性(只能是值类型(8基本数据类型+1 String))
复杂类型注入:
数组:
图666666
list集合:
图666666
map集合:
图666666
properties类型:
图666666
导包:
在Spring 4+2基础上,再加上一个aop.xxx.jar包,位置Spring解压包下,libs目录中
配置文件 开启 注解开关:
1. 先导入约束:Spring解压包下schema目录下的context目录中
2. 配置文件中:
图666666
注解:
注册对象:
图666666
指定对象作用域:
图666666
指定生命周期方法:
图666666
值类型注入:@Value可以加在成员变量或set方法上
图666666
引用类型注入:
自动注入:
图666666
自动+手动:
图666666
纯手动:
图666666
未完待续……