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

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

Spring理念

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

Spring是什么

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

SpringBoot是什么

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

SpringCloud是什么

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

为什么用IOC

原本

1
java复制代码UserDao userDao  = new UserDaoImpl();

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

怎么实现IOC

1
2
3
4
5
java复制代码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. 测试
  1. 方法2
1. sqlSessionDaoSupport

声明式事务

保证原子性

可以使用AOP编入

传播特性

针对事务来说的

一般是required

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%