【程序员不圆1】【狂神说JavaSpring5读书笔记1】
Spring理念
使现有的技术更好的使用,本身是一个大杂烩,整合了现有的技术框架
Spring是什么
一个轻量级,非入侵的的IOC,AOP框架
SpringBoot是什么
用来构建一切,一个快速开发的脚手架,可以快速开发单个微服务,约定大于配置
SpringCloud是什么
用来协调一切,基于SpringBoot实现,各种微服务,中间件
为什么用IOC
原本
1 | java复制代码UserDao userDao = new UserDaoImpl(); |
如果想换成UserDaoMysqlImpl()就需要更改代码
怎么实现IOC
1 | java复制代码private UserDao userDao; |
什么是IOC
对象创建与否不再是程序员控制
可以是用户控制或者是框架控制
怎么控制?传入要控制的对象就行
ApplicationContext有什么特殊
假如读取了Beans.xml文件,那么这个文件中的所有的Bean都可以用哪个ApplicationContext直接getBean获取
容器中管理的文件一起初始化
IOC对象的创建
- 无参构造+setter
- 有参构造+下标赋值
- 有参构造+类型赋值
- 有参构造+名称赋值
DI是什么
DI只是IOC的一种实现方法
DI有什么方法
注入属性
- 构造器注入
- settter注入
- 拓展注入
注入方法
- value注入:value
- Bean注入:ref
- 数组注入:array
- List注入:list
- Map注入:map,entry,key,value
- Set注入:set,value
- null:
- property:props,key
- p命名空间注入:p:name setter注入 需要导入约束
- c命名空间注入:c:name 构造器注入 需要导入约束
Bean的Scope
- 单例
- 原型
- request、session、application、websoket都在web开发中使用
Bean的装配
- xml
- java
- 隐式
Bean的自动装配
- xml
- byName:上下文中找,比如xml中找名字相同的 id唯一
- byType:class唯一,可以不要id
- 注解
- 要求
- 导入约束
- 开启注解的支持
- Autowired
- 可以不用setter
- 默认bytype
- @nullable可以为空
- require=false 可以为空
- @Qualifier指定到底注入哪一个
- @Resource 默认bytype 如果找不到就byname 如果找不到就报错
- @component
- 需要开启注解的支持
- 衍生
- @Repository
- @Service
- @Controller
- 要求
- java注入
- @Configuration
- 本身也是个Component
- @Bean
- @Configuration
注入的最佳实践
xml创建bean
注解属性的注入
静态代理
自己写一个Proxy
静态代理代理模式缺点
代码量翻倍
动态代理
自动生成代理类
原理:反射
方法
- 基于接口:默认 JDK动态代理 Proxy.newProxyInstance 代理的是接口 返回的是接口不是实现类
- 基于类:cglib 如果目标对象没有实现了接口,必须采用CGLIB库
- java字节码
动态代理好处
- 一个代理类可以代理一个业务 不用一个类一个代理类
AOP实现
- 原生Spring API:xml 导入aop约束 切入点 advisor
- 自定义类: xml 主要是切面定义
- 注解:
AOP概念
切面:类 需要执行代理的类
通知:方法 切面必须完成的工作
目标:通知的对象
代理:创建的对象
切入点:通知执行的地点的定义?哪些方法需要执行(“execution(* com.xx.xx.xxxImpl.(..))”)
连接点:切入点匹配的执行点
Mybatis整合
- 方法1
1. 实体类
2. 核心配置文件
1. Datasource
2. sqlSessionFactory
3. sqlSessionTemplate
3. 接口
4. Mapper.xml
5. 测试
- 方法2
1. sqlSessionDaoSupport
声明式事务
保证原子性
可以使用AOP编入
传播特性
针对事务来说的
一般是required
本文转载自: 掘金