一、Spring的特征 非侵入式: 用这个框架,不会给你项目原本的代码增加什么东西(对你的代码几乎没有任何改动),该框架基本上是以注解、配置文件的方式使用在项目中的。 控制反转:
一、Spring的特征
非侵入式: 用这个框架,不会给你项目原本的代码增加什么东西(对你的代码几乎没有任何改动),
该框架基本上是以注解、配置文件的方式使用在项目中的。控制反转: IOC(后面重点学习)面向切面编程: AOP(后面重点学习)容器: IOC容器,Spring开发所有功能都是基于IOC容器,屏蔽对象的创建细节,让程序员只关注对象的使用组件化:Spring可以通过IOC和依赖注入的方式将各个功能组件组合起来,共同搭建完成一个大型复杂应用,并且
还能够尽量降低组件与组件间的耦合。声明式: 其实就是让我们通过配置或者注解来完成一些功能,而不需要通过编写代码来完成这些功能。一站式: Spring Framework可以整合市面上各种优秀的第三方框架,从而降低那些第三方框架的使用成本。二、Spring的五大功能模块
Test: Spring对单元测试的支持,可以整合Junit从而降低单元测试的使用成本Core Container: 核心容器,它的主要体现是在IOC和依赖注入功能中。AOP: 面向切面编程Web: SpringMVC,用在表现层的技术Data Access: Spring对持久层技术的支持,包含JdbcTemplate、事务管理等等三、IOC容器
什么是容器?
在Java中,容器就是用于存放/管理数据的一块内存空间容器的分类
2.1 普通容器:只能存放数据、删除数据、向外提供数据的容器,例如: List、数组、Map等等
2.2 复杂容器:它不仅能存放数据、删除数据、向外提供数据,还能自己创建容器中的对象、管理对象的生命周期、销毁对象等等一些操作。
例如: Tomcat就是一种复杂容器,Tomcat不仅能够存放Servlet、Filter、Listener对象,还能够创建这些对象、管理这些对象
的生命周期、在不同的生命周期调用它们不同的方法进行处理、销毁这些对象等等。IOC的概念:
inversion of control,控制反转。将对象的创建权反转交给IOC容器,由IOC容器创建对象,对象的使用者只需要从IOC容器中
获取他想要的对象,并加以使用就行了。IOC的优势:
4.1 屏蔽对象创建的细节,对象的使用者不再是对象的创建者,不用再去关注对象的创建细节
4.2 降低程序的耦合度IOC容器的实现方案:
5.1 BeanFactory: 这种方案一般是Spring内部使用的,Spring框架的内部功能使用IOC容器的话,用的是BeanFactory实现的5.2 ApplicationContext: 它是BeanFactory的子接口,它的功能比BeanFactory更丰富一些,面向Spring的使用者ApplicationContext接口的具体的实现类:
6.1 ClassPathXmlApplicationContext: 读取类路径下的xml配置文件,从而创建IOC容器对象
6.2 FileSystemXmlApplicationContext: 读取文件系统中任意路径下的xml配置文件,从而创建IOC容器
6.3 AnnotationConfigApplicationContext: 读取配置类,从而创建IOC容器,主要用在纯注解开发的Spring项目中
6.4 WebApplicationContext: 为Web工程(SpringMVC)提供的IOC容器四、SpringIOC的快速入门
目标:
1.1 由IOC容器读取类路径下的xml配置文件,创建出HappyComponent类的对象
1.2 使用者从IOC容器中获取HappyComponent类的对象实现步骤:
2.1 引入依赖
2.2 在类路径下创建spring的配置文件,编写ioc
2.3 创建IOC容器,让其读取类路径下的spring配置文件
2.4 从IOC容器中获取HappyComponent对象,并使用该对象五、依赖注入
依赖注入的概念:
1.1 Spring在进行IOC创建的对象,主动给对象的成员变量赋值。
1.2 IOC容器识别到你需要这个对象,它主动将容器中的该对象给你。依赖注入的意义
2.1 降低编译期耦合
2.2 让IOC容器统一管理项目中的对象
2.3 解决硬编码问题依赖注入的方式:
3.1 set方法进行注入: 需要注入的属性有对应的set方法,使用property标签(name属性对应set方法)
3.1.1 注入简单类型的属性:
3.1.1.1 使用value属性
3.1.1.2 可以引入外部的properties文件,获取文件中的内容
3.1.2 注入Bean类型的属性:
3.1.2.1 IOC容器中有要被注入的Bean类型的对象,就使用ref引用该对象的id
3.1.2.2 如果IOC容器中没有要被注入的Bean类型的对象,我们可以注入内部Bean
3.2 有参构造函数的方式进行依赖注入(了解)
自动装配
4.1 什么是自动装配?
我们不主动通过标签或者p命名空间告知IOC容器要调用哪个set方法,而是由IOC容器自动调用set方法设置值4.2 自动装配的分类:
4.2.1 byType: 按照类型自动装配,例如UserController中有一个setUserService()方法,需要接收UserService,
如果IOC容器中有且只有一个UserService类型的对象就将其装配进来。
4.2.2 byName: 按照名称唯一标识自动装配,根据对象的id匹配对应的set方法五、Bean的作用范围
什么是Bean?
所有由Spring的IOC容器管理的对象都叫BeanBean的作用范围:
2.1 singleTon单例(默认): 在创建IOC容器的时候,就初始化Bean,将Bean存储到IOC容器中,使用者从容器
获取Bean的时候,指向容器中的Bean对象
2.2 prototype多例: 在容器调用getBean()方法获取Bean的时候才创建Bean,并且每次调用getBean()方法都会重新创建Bean,
所以创建出来的Bean,不会存储在IOC容器中的。六、Bean的生命周期
创建Bean: 调用构造函数创建Bean对象
1.1 如果是单例Bean: 在创建IOC容器的时候创建Bean
1.2 如果是多例: 在调用getBean()方法的时候创建Bean给Bean设置属性(依赖注入):调用set方法由后置处理器的前置处理方法,执行Bean初始化之前的操作
Bean的后置处理器是作用在Bean的初始化前后,后置处理器中的前置处理方法是作用在Bean初始化之前。Bean初始化,调用Bean的初始化方法Bean的后置处理器的后置处理方法,执行Bean初始化之后的操作Bean准备就绪,我们就可以使用BeanBean的销毁(给Bean指定一个销毁方法)
7.1 单例Bean: 随着IOC容器的关闭而销毁
7.2 多例Bean: 随着JVM的垃圾回收而销毁七、FactoryBean机制
普通Bean机制IOC创建来的就是它自己的对象FactoryBean机制创建出来的是它的getObject()方法返回的对象