【程序员不圆1】【狂神说JavaSpring5读书笔记1】

425 阅读3分钟

【程序员不圆1】【狂神说JavaSpring5读书笔记1】

Spring理念

使现有的技术更好的使用,本身是一个大杂烩,整合了现有的技术框架

Spring是什么

一个轻量级,非入侵的的IOC,AOP框架

SpringBoot是什么

用来构建一切,一个快速开发的脚手架,可以快速开发单个微服务,约定大于配置

SpringCloud是什么

用来协调一切,基于SpringBoot实现,各种微服务,中间件

为什么用IOC

原本

UserDao userDao  = new UserDaoImpl();

如果想换成UserDaoMysqlImpl()就需要更改代码

怎么实现IOC

private UserDao userDao;

public void setUserDao(UserDao userDao){
    this.userDao = userDao;
}

什么是IOC

对象创建与否不再是程序员控制

可以是用户控制或者是框架控制

怎么控制?传入要控制的对象就行

ApplicationContext有什么特殊

假如读取了Beans.xml文件,那么这个文件中的所有的Bean都可以用哪个ApplicationContext直接getBean获取

容器中管理的文件一起初始化

IOC对象的创建

  1. 无参构造+setter
  2. 有参构造+下标赋值
  3. 有参构造+类型赋值
  4. 有参构造+名称赋值

DI是什么

DI只是IOC的一种实现方法

DI有什么方法

注入属性

  1. 构造器注入
  2. settter注入
  3. 拓展注入

注入方法

  1. value注入:value
  2. Bean注入:ref
  3. 数组注入:array
  4. List注入:list
  5. Map注入:map,entry,key,value
  6. Set注入:set,value
  7. null:
  8. property:props,key
  9. p命名空间注入:p:name setter注入 需要导入约束
  10. c命名空间注入:c:name 构造器注入 需要导入约束

Bean的Scope

  • 单例
  • 原型
  • request、session、application、websoket都在web开发中使用

Bean的装配

  1. xml
  2. java
  3. 隐式

Bean的自动装配

  1. xml
    1. byName:上下文中找,比如xml中找名字相同的 id唯一
    2. byType:class唯一,可以不要id
  2. 注解
    1. 要求
      1. 导入约束
      2. 开启注解的支持
    2. Autowired
      1. 可以不用setter
      2. 默认bytype
      3. @nullable可以为空
      4. require=false 可以为空
      5. @Qualifier指定到底注入哪一个
    3. @Resource 默认bytype 如果找不到就byname 如果找不到就报错
    4. @component
      1. 需要开启注解的支持
      2. 衍生
        1. @Repository
        2. @Service
        3. @Controller
  3. java注入
    1. @Configuration
      1. 本身也是个Component
    2. @Bean

注入的最佳实践

xml创建bean

注解属性的注入

静态代理

自己写一个Proxy

静态代理代理模式缺点

代码量翻倍

动态代理

自动生成代理类

原理:反射

方法

  • 基于接口:默认 JDK动态代理 Proxy.newProxyInstance 代理的是接口 返回的是接口不是实现类

  • 基于类:cglib 如果目标对象没有实现了接口,必须采用CGLIB库

  • java字节码

动态代理好处

  • 一个代理类可以代理一个业务 不用一个类一个代理类

AOP实现

  1. 原生Spring API:xml 导入aop约束 切入点 advisor
  2. 自定义类: xml 主要是切面定义
  3. 注解:

AOP概念

切面:类 需要执行代理的类

通知:方法 切面必须完成的工作

目标:通知的对象

代理:创建的对象

切入点:通知执行的地点的定义?哪些方法需要执行("execution(* com.xx.xx.xxxImpl.(..))")

连接点:切入点匹配的执行点

Mybatis整合

  1. 方法1

    1. 实体类
    2. 核心配置文件
      1. Datasource
      2. sqlSessionFactory
      3. sqlSessionTemplate
    3. 接口
    4. Mapper.xml
    5. 测试
  2. 方法2

    1. sqlSessionDaoSupport

声明式事务

保证原子性

可以使用AOP编入

传播特性

针对事务来说的

一般是required