文章目录
什么是spring?
一个主流的开源的轻量的JavaEE框架。有Rod Jhonson(spring之父)提出,用于简化开发难度和开发周期。
spring分类
广义:spring技术栈
由多个子项目组成,如:springMVC 、SpringBoot、SpringCloud等。其中springFramework是所有子项目的基础。
狭义:springFramework
两个核心:IOC、AOP
IOC:控制反转,把创建对象和管理对象的整个过程交个spring来处理。
AOP:面向切面,在不改变代码或很少改变代码的情况下增加其他功能。
spring特点
1、非侵入式:零污染。不依赖其他组件也可使用。
2、IOC:控制反转。
3、AOP:面向切面。
4、容器:把对象放入容器中,由此容器对对象的生命周期进行管理。
5、组件化:把复杂的应用拆分为多个简单组件。
spring5入门案例
-
1、下载spring
- 使用spring最新的稳定版本5.3.27
*下载地址
https://repo.spring.io/ui/native/release/org/springframework/spring/
如图:
- 2、打开idea工具,创建普通的Java工程
- 使用spring最新的稳定版本5.3.27
-
3、导入spring5相关jar包
- 4、创建普通的Student类,在类中添加属性和方法
- 5、创建spring配置文件,再配置文件中创建对应的对象
- 6、进行测试
测试结果:
IOC的概念和原理
一、什么是IOC
1、控制反转,把对象创建和对象之间的调用的过程交给spring进行管理。
2、目的:降低耦合度
二、IOC底层原理
xml解析、工厂模式、反射
- 原始方法调用类中的属性
- 工厂模式降低耦合度
- 画图讲解IOC底层原理
-
1、xml配置文件,配置创建对象
-
2、创建工厂类
class StudentFactory{
pulbic static StudentMapper getStudent(){
String classValue = class属性值;//xml解析
Class c = Class.forName(classValue);//获取类的class对象
Student stu = (Student) c.newInstance();//实例化对象的
return stu;
}
}
三、spring提供IOC容器实现的两种方式(两个接口)
BeanFactory: IOC基本实现,是spring内部使用的接口,不提供给开发人员进行使用。加载配置文件的时候不会创建对象,要在获取对象的时候才创建。
ApplicationContext:BeanFactory子接口,提供了更多更强大的功能,一般由开发人员使用。加载配置文件的时候就把配置文件中的对象进行创建。
ApplicationContext接口中的实现类
如图:
四、IOC操作Bean管理
1、什么是Bean管理
Bean管理是指两个操作,spring创建对象和spring注入属性。
2、Bean管理操作的两种方式:
基于XML配置文件方式
基于注解方式
基于xml方式创建对象
如:1、在spring配置中,使用bean标签,在标签里面添加相应属性,就可以实现对象的创建。
2、在bean标签中的属性:
id:唯一标识
class:类全路径(包类路径)
3、创建对象时,默认执行无参构造方法来创建对象。
基于XML方式注入属性
-
第一种:使用set方法进行注入
-
创建类,定义属性和对应的set方法
-
在spring配置文件中配置对象的创建和属性的注入
-
在类中创建方法打印测试属性值
-
在测试类中获取对象及测试属性的方法
-
-
第二种:使用有参构造进行注入
-
创建类,定义属性和对应的有参构造
注:要生成无参构造,因为XML配置文件通过无参构造方法来创建对象
-
配置文件中进行属性注入和对象创建
* 步骤三和步骤四与方法一一致:略
- 第三种:p名称空间注入
-
在配置文件中添加p名称空间
-
进行属性注入,在bean便签里面操作
注:需生成属性对应的set方法
- 注入其他属性
- 注入null值
使用对应的null标签
- 注入null值
-
- 属性值含有特殊符号—把含有特殊符号的内容写入CDATA
- 注入属性–外部Bean
-
创建emp和dept两个类,并添加相应的属性及set方法
-
在emp类引用dept对象属性
-
配置文件配置外部Bean
注:在emp中注入dept对象,使用peoperty标签,其中name属性对应类中的属性名称;ref属性是代表dept对象bean标签中的id属性值。 -
在emp中创建方法打印测试属性–dept类需要进行toString
-
在测试类中测试emp对象及其测试方法
- 注入属性–内部Bean
注:外部Bean和内部Bean的区别
外部bean:直接在beans标签内部定义bean对象,外部bean可以被多个bean对象引用;
内部bean:在某个bean标签内部定义bean对象,内部bean只能对该bean标签的某个属性引用。
- 注入属性:级联赋值
需要获取对象的属性值,故在emp类中生成dept的get方法
例:
- 注入属性-注入其他类型
- 注入数组类型
2.注入list类型
3.注入Set集合类型
4.注入Map集合类型
- 在集合或数组中设置对象类型值
1、创建Teacher类和Course类,并创建对应的属性和set方法
Teacher类Course类
2、配置文件中做相应配置
3、作相应测试
把集合注入部分提取公用
1、在spring配置文件中引用名称空间util
如图:2、使用util标签完成list集合注入
3、在创建对象时引用注入的集合
Bean的分类
普通Bean
再配置文件中定义的Bean类型就是返回类型
工厂Bean
在配置文件中洪定义的bean类型可以和返回的类型不一致
1、创建类,让该类作为工厂类,实现接口FactoryBean
2、实现接口里面的方法,在实现的方法中定义bean的返回类型
bean的作用域
1、在Spring里面,设置创建bean是单实例还是多实例
2、在spring里面,默认情况下,bean是单实例对象(指向同一个地址值)
3、如何设置bean是单实例或多实例
通过bean标签中的scope属性设置。singleton设置单实例。prototype设置多实例。
多实例案例:
区别 : 单实例情况在加载spring配置文件时就创建出单实例对象;多实例情况下需要在调用getBean()时才会创建多实例对象。
bean生命周期
一、从对象创建到对象销毁的过程。
二、周期历程:
1、通过构造器来创建bean实例(无参构造);
2、为bean的属性设置值;
3、调用bean的初始化方法;
4、使用bean;(获取到了对象)
5、当容器关闭时,调用bean的销毁的方法。
三、演示bean的生命周期
1、创建测试类
如:2、配置文件做相关配置
如:3、创建测试类
如:四、bean的后置处理器,生命周期七步
1、通过构造器来创建bean实例(无参构造);
2、为bean的属性设置值;
3、把bean实例传递给bean后置处理器方法进行相应处理;–postProcessBeforeInitialztion
4、调用bean的初始化方法;
5、把bean实例传递给bean后置处理器方法进行相应处理。–postProcessAfterInitialztion
6、使用bean;(获取到了对象)
7、当容器关闭时,调用bean的销毁的方法。
五、添加后置处理器:
1、创建类,实现接口BeanPostProcessor
如:
2、配置文件中配置后置处理器
如:
xml自动装配
1、什么是自动装配
根据指定的规则(属性名称,属性类型)将匹配的属性值进行注入。
通过bean标签的autowire属性实现自动装配
2、根据属性名称自动装配(autowire= “byName”)
注:类属性名称要与注入值bean的id属性值保持一致
3、根据属性类型自动装配(autowire= “byType”)
注:类属性类型要与注入值bean的class属性值保持一致
引入外部属性文件
1、直接配置数据库信息
1.1 配置德鲁伊连接池
1.2 引入的德鲁伊连接池依赖包
如:
2、引入外部属性文件来配置数据库信息
2.1 创建外部属性文件,properties格式文件,用于写数据库信息
如:
2.2 把外部属性文件引入到spring配置文件中
2.2.1 引入context名称空间
2.2.2 引入外部属性文件
2.3配置数据库信息