一、概述
SpringBoot是Spring的简化版,底层就是Spring
分布式SpringCloud底层就是SpringBoot
1.1 作用:解耦
耦合:抽象类/接口 对象=new 子类/接口实现类();企业需求变化,new的代码都要改
任何类的一个对象都是一个javaBean
早期使用的是EJB,重量级框架,使用配置复杂
Spring轻量级框架
1.2 业务功能
项目中的业务功能可以分成两类
主业务逻辑
复用度低:转账,存钱,取钱;借书,还书;入住,结账
一个公司的系统不可能拿来给另一个公司用,同一行业也不行,业务逻辑都不同
交叉业务逻辑(系统级服务,不能独立用,放在主业务中)
可以复用:记录日志,事务控制,权限控制(filter的代码可以复用)
1.3 IoC和AOP
IoC:控制反转就是解决主业务的耦合,配置文件+反射+工厂
AOP:面向切面编程,将交叉业务作为切面(交叉业务)织入到主业务中
解决主业务逻辑和交叉业务逻辑耦合
Filter就是AOP
执行主业务之前,Filter做登录判断(切面,可复用的交叉业务)
下面都是主业务
二、框架搭建
学的是Spring Framework
jar包
spring对市面上常用的第三方jar包进行了一个整合,前面加了自己的名字,但源代码都是一样的
核心包
2.1 添加jar包
log4j实现logging的接口,jog4j可以不要,logging必须要
日志门面和log4j,测试jar
一共七个包
2.2 配置文件
建议放在src类路径根目录下,名字可以任意,官方建议applicationContext.xml
2.2.1约束头
<?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">
<!-- bean definitions here -->
</beans>
提示自己配一下,核心包里都有
2.2.2 beans标签
2.3 应用
读取类路径
进行解耦
其实这就是IoC:控制反转,对象创建权的转移,传统方法是程序员自己new的
使用Spring框架,将对象的创建交给Spring容器,由框架创建,底层:工厂模式+配置文件+反射
只需要更改配置文件即可,不用动源代码
filesystem文件系统就是I/O,路径你随意放,上面只能放在类路径下
2.4 注意事项
2.4.0
对应bean标签的id4
2.4.1 servlet底层源码没有日志
2.4.2 logging和log4j的关系
logging:日志门面,接口
log4j:一种日志实现
2.4.3 ApplicationContext和BeanFactroy区别
Bean工厂也是造bean的
BeanFactory:调用getBean()才会创建对象,不建议使用
ApplicationContext:容器启动时,创建所有bean,第一次比较慢,负担较大,后面的人用得体验好
2.5 Bean的装配
Bean的装备:让容器创建对象
2.5.1 默认装配方法:(我们常用)
底层使用无参构造器
写了带参构造器,一定添加无参构造
缺无参构造错误
2.5.2 动态工厂Bean
使用工厂创建对象,工厂方法是实例方法
没用对,直接用工厂生成对象,在创建什么产品时还是有耦合,所以不对
原因:把工厂bean当成普通bean来用了
错误示例:
正确用法:
2.5.3 静态工厂Bean
静态方法直接类调用,不用对象调用
2.6 Bean的作用域
默认单例
2.7 Bean的生命周期
Bean的生命周期比较复杂,有11个生命周期
接口没有方法,接口实现类才有close()方法,要进行向下转型
向下转型不一定能转成功,假转是可以的,真转骗一下编译器运行也会出错
有fc=sc是假转,没有是真转,真转就报错,类型不兼容
一开始调用这个方法哪来的config参数,是读取配置文件得到的参数信息
2.8 DI依赖注入
2.8.1概述
IoC:Inversion of Controll控制反转(不需要自己new,交给容器来创建对象),是一种思想,有不同的实现方式,常见的有两种:
DL:依赖查找dependence looup,类似于目录查找
JNDL:java命名的查找
DI:依赖注入dependence injection,对象由容器来创建,要一个创建一个,对象的属性值也在配置文件中配置
创建对象+对象属性赋值
DI有两种实现
设值注入
构造注入
2.8.2 设值注入
1.单表
底层使用的无参构造+SetXxx
2.有域属性
基本数据类型和字符串用value,其他用ref
2.8.3 构造注入
底层使用的带参构造