一、spring 介绍
- 三层架构中 spring 的位置

- spring 一站式框架
- spring 框架是属于容器性质的,所以容器中装什么对象就有什么功能,所以可以一站式
- spring 不排斥其它框架,并且可以帮其它框架管理对象
- 支持 AOP
- IOC 思想
- spring jdbc
- aop 事务
- 支持 junit 测试
二、spring 搭建
-
导包
使用 spring 最基础的包
spring-beans-4.2.4.RELEASE.jar
spring-context-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-expression-4.2.4.RELEASE.jar
# 日志包
com.springsource.org.apache.commons.logging-1.1.1.jar
# 可选包 建议导进去
com.springsource.org.apache.log4j-1.2.15.jar
- 创建一个对象
public class user {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
- 书写配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 将user对象交给spring容器管理 -->
<bean name="user" class="org.lingnan.entity.user"></bean>
</beans>
- 配置文件位置任意,建议放到src下
- 配置文件名任意,建议名为 appilicationContext.xml
- 代码测试
@Test
public void fun1(){
// 1 创建容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2 向容器要 user 对象
user u = (user) ac.getBean("user");
// 3 打印 user 对象
System.out.println(u);
}
三、spring 概念 (重点)
- 思想
-
IOC 控制反转
将我们创建对象的方式反转了,以前对象的创建是由开发人员自己维护,包括依赖关系也是自己注入。使用spring后,对象的创建以及依赖注入都可以由spring来帮我们完成。
控制反转就是创建对象的方式反转了,从开发人员创建反转给程序(spring)。 -
DI 依赖注入
将必须的属性注入到对象中,是实现IOC思想的必须条件。
- applicationContext & BeanFactory
-
applicationContext
1). 每次容器启动时就会创建容器中配置的所有对象,并提供更多功能
2). 从类路径下加载配置文件:ClassPathXmlApplicationContext -
BeanFactory
1). spring原始接口,针对原始接口的实现类功能较为单一
2).BeanFactory接口实现类的容器,特点是每次在获得对象的时候才创建。
结论: web开发中,使用applicationContext,在资源匮乏的环境中可以使用BeanFactory。
四、spring 配置详解 (重点)
- bean 元素
<!-- Bean元素:使用该元素描写需要被容器管理的对象
class属性:被管理对象的完整类名
name属性:给被管理的对象起个名字,根据该名称来获得对象
可以重复,可以使用特殊字符
id属性:与name属性作用一样
不可重复,不能使用特殊字符
结论:尽量使用name属性
-->
<bean name="user" class="org.lingnan.entity.user"></bean>
- bean元素进阶
-
scope属性
1). singleton(默认值):单例对象。被标识为单例的对象在spring中只会存在一个实例。
2). prototype:多例原型。被标识为多例的对象,每次在获得时才会创建,并且每次创建都是新的对象。整合struts2时,ActionBean必须配置为多例的。
3). request:web环境下,对象与request生命周期一致。
4). session:web环境下,对象与session生命周期一致. -
生命周期属性(了解)
1). 配置一个方法作为生命周期初始化方法.spring会在对象创建之后立即调用.
2). 配置一个方法作为生命周期的销毁方法.spring容器在关闭并销毁所有容器中的对象之前调用.
3). 配置方式

- spring 创建对象的方式
- 空参构造方式

- 静态工厂(了解)


- 实例工厂(了解)


- spring 的分模块配置

五、spring 属性注入 (重点)
- 注入方式
- set方式注入

注意:引用类型注入之前,必须在容器中先配置相应的对象
- 构造函数注入

- p名称空间注入

- spel注入

- 复杂类型注入
- 数组


- list


- map

- properties

网友评论