一、引言
1 什么是spring
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
spring是轻量级的开源框架,不是替换原有的任何技术,而是对开发过程中的组件(包括Action/service/dao/事务等)进行管理的框架,是项目管理的框架。
其中使用了很多优秀的设计模式(工厂模式、代理模式、原型模式。。。。。)
注意:spring不管理 entity实体类。
2 spring的核心思想
两大核心思想 :IOC(Inversion of Control) 控制反转
AOP(Aspect Oriented Programming) 面向切面编程
二、回顾简单工厂
-
工厂的作用: 创建对象。
-
工厂的好处:解耠合。
-
使用工厂的步骤:1) 创建类 2) 配置文件中配置该类 3) 从工厂获取对象
三、环境搭建
仓库网址:https://mvnrepository.com/
- 引maven依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
</dependencies>
-
配置文件 xml格式
文件名称: 随意
位置:随意
四、spring的第1个程序【重点】
1 使用步骤
-
创建要管理的组件/类
-
在spring的配置文件,配置管理组件
<bean id="唯一标识" class="类的全限定名">
</bean>
示例:
<bean id="userService" class="com.baizhi.first.UserServiceImpl">
</bean>
- 从spring工厂中,获取组件
//启动spring工厂(框架/容器)-非web环境的工厂
// WebXmlApplicationContext-web环境中的工厂类
ApplicationContext ctx = new ClassPathXmlApplicationContext(“文件夹/spring.xml”) ;
// 从spring工厂中获取对象
Object obj = ctx.getBean("bean的唯一标识");
UserService service = (UserService )obj;
示例:
// 启动srping工厂
ApplicationContext ctx = new ClassPathXmlApplicationContext("/spring.xml");
// 从工厂获取对象
UserService service = (UserService)ctx.getBean("userService");
service.register(new User());
2 spring工厂管理组件的底层实现
伪代码:
beanid id唯一标识 class--> 类的全限定名
Class c = Class.forName("类的全限定名");
obj = c.newInstance();
五、什么是IOC【重点】
IOC(Inversion of Control) 控制反转:对象的创建 由原来代码中new的方法 转移到 spring的配置文件中,由spring工厂进行创建。
spring不仅提供了对 对象的管理,而且对象和对象 间的依赖关系 也提供了 完美的解决方案–即,DI(Dependency Injection)依赖注入。
六、DI 依赖注入
1 概念
DI是一种编程思想,如果一类要使用另一个类,则把被使用的类定义为当前类的成员变量,使用spring可以进行属性的自动赋值。
2 实现方式
DI的实现有3种方式:
1. set注入:使用属性的set方法自动赋值 <font color="red">【重点】</font>
2. 构造注入:使用构造方法给属性赋值
3. 自动注入:使用属性的set方法自动赋值
3 set注入 【重点】
使用属性的set方法自动赋值
-
引用注入(引用工厂中已存在的组件)【重点】
第一种语法:
第二种语法【了解】:
-
值注入(给属性赋的值 不是工厂中已存在的组件)
8种基本类型、包装类、日期类型:
第一种语法:
第二种语法:
数组类型:
List类型:
set类型:
Map类型:
Properties类型:
4 构造注入【了解】
通过带参构造给属性赋值。
5 自动注入【了解】
底层调set方法。
七、spring创建对象的数量【重点】
- 默认spring单例管理对象,提高性能(节约内存)。
单例和多例的对比:
单例: (优)轻量级 (缺)多线程环境中,数据不安全
多例:(优)数据安全 (缺)重量级
八、bean的生命周期 【了解】
4个阶段:实例化、初始化、使用、销毁
bean的生命周期,由 spring工厂/容器/框架 进行管理。
1.实例化: 单例----工厂启动,创建对象。
多例—使用时(调getBean方法) 创建。
2.初始化: 只执行1次。
3.使用
4.销毁: 只管理单例bean的销毁 。