1. 核心容器
    1. IOC/DI
    2. Bean的配置
    3. Bean的生命周期
    4. Bean的注入
    5. Bean的自动装配
      1. @Autowired 按类型
        1. @Qualifiler 多类型,指定名称注入bean
      2. @Value 自动装备 值
    6. 加载属性文件
    7. 容器
      1. ApplicationContext
      2. BeanFactory
  2. 注解开发模式
    1. 配置组件扫描
    2. 常用注解
      1. @Component
        1. @Service
        2. @Repository
        3. @Controller
    3. 用类配置
      1. @Configuration 标识一个配置类
      2. @ComponentScan 组件扫描定义
      3. @PropertySource 属性文件加载
    4. 配置类加载 AnnotationConfigApplicationContext 容器
    5. Bean的@Scope
    6. Bean的生命周期
      1. @PostConstruct
      2. @PreDestory
    7. 三方包使用注解注入
      1. 自定义get方法返回注入的对象
      2. @Bean 表示上边get返回值就是要添加到容器的Bean
      3. 简单类型@Value注入
      4. 引用类型写在get 方法参数里,自动注入
    8. 多配置类
      1. @Import 导入其他配置类
  3. AOP(面向切面编程)
    1. 基本概念
      1. 无侵入式编程 (Spring的理念)
        1. 在不改动源代码的情况下进行功能增强
      2. 代理模式
        1. SpringAOP的本质
      3. 连接点 JoinPoint
        1. 原始功能的方法
      4. 切入点 Pointcut
        1. 被增强的连接点,映射要增强的方法
      5. 通知 Advice
        1. 做增强的方法
      6. 通知类
        1. 包括增强方法的类
      7. 切面 Aspect
        1. 通知和切入点的对应关系
    2. AOP 使用流程
      1. 制作连接点方法(原始操作,Dao接与实现类)
      2. 制作共性功能( 通知类与通知)
      3. 定义切入点
      4. 绑定切入点与通知关系 ( 切面)
    3. 常用注解
      1. @EnableAspectAutoProxy 启动切面自动代理 开启注解AOP功能
      2. @Aspect 给类启用AOP功能
      3. @Pointcut 定义切入点映射到连接点
    4. AOP工作流程
      1. Spring容器启动
      2. 读取所有切面配置中的切入点
      3. 初始化Bean,判定Bean中是否有方法匹配任意切入点
        1. 匹配失败 创建对象
        2. 匹配成功 创建原始对象的代理对象
      4. 获取bean的执行方法
        1. 匹配失败的 获取Bean 调用方法
        2. 匹配成功的 获取Bean的代理对象根据代理对象运行原始方法和增强方法
    5. 切入点表达式
      1. 要进行增强的方法的描述方式
      2. 标准格式:动作关键字(访问修饰符 返回值 包名.类名/接口.方法名(参数) 异常名)
        1. 修饰符 和 异常 可以忽略
      3. 使用通配符描述切入点
        1. ‘*’ 单个独立的任意符号,可以独立出现,也可以作为 前缀 或者 后缀 的匹配符出现
          1. execution ( public * com.itheima.* .UserService.find* ( * ) )
          2. 匹配com.itheima包下的任意包中的UserService类或接口中所有find开头的带有一个参数的方法
        2. ‘..’ 多个连续的任意符号,可以独立出现,常用于简化 包名 与 参数 的书写
          1. execution (public User com..UserService.findById (..) )
          2. 匹配com包下的任意包中的UserService类或接口中所有名称为findBvld的方法
        3. ‘+’ 专用于匹配子类类型
          1. execution(* * ..* Service+.*(..))
      4. 书写技巧
        • 所有代码按照标准规范开发,否则以下技巧全部失效
        • 描述切入点通常描述接口,而不描述实现类
        • 访问控制修饰符针对接口开发均采用public描述( 可省略访问控制修饰符描述
        • 返回值类型对于增删改类使用精准类型加速匹配,对于查询类使用*通配快速描述
        • 包名书写尽量不使用..匹配,效率过低,常用做单个包描述匹配,或精准匹配
        • 接口名/类名书写名称与模块相关的采用匹配,例如UserService书写成Service,绑定业务层接口名
        • 方法名书写以动词进行精准匹配,名词采用匹配,例如getByld书写成getBy,selectAll书写成selectAll
        • 参数规则较为复杂,根据业务方法灵活调整
        • 通常不使用异常作为匹配规则
    6. 通知
      1. 常用注解
        1. @Around:环绕增强
          1. 注意事项
            1. 环绕通知必须依赖形参ProceedingJoinPoint才能实现对原始方法的调用,进而实现原始方法调用前后同时添加通知
            2. 通知中如果未使用ProceedingJoinPoint对原始方法进行调用将跳过原始方法的执行
            3. 对原始方法的调用可以不接收返回值,通知方法设置成void即可,如果接收返回值,必须设定为Obiect类型
            4. 原始方法的返回值如果是void类型,通知方法的返回值类型可以设置成void,也可以设置成Obiect
            5. 由于无法预知原始方法运行后是否会抛出异常,因此环绕通知方法必须抛出Throwable对象
          2. Signature 记录了连接点的执行信息
        2. @Before:前置增强
        3. @AfterReturning:后置增强—方法正常退出时执行
        4. @AfterThrowing:后置增强—方法异常执行
        5. @After:后置增强-一直执行
      2. 获取通知数据
        1. 形参添加,获取 连接点参数,返回值,异常等
        2. 环绕通知:ProceedingJoinPoint 对象
        3. 其他:JoinPoint 对象
  4. Spring事务
    1. 事务作用: 在数据层保障一系列的数据库操作同成功同失败
    2. Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败
    3. 实现
      1. 接口 PlatformTransactionManager
        1. commit
        2. rollback
      2. 实现类 DataSourceTransactionManager
      3. 注解 @Transactional 一般开在 业务层接口
      4. 注解 @EnableTransactionManagement 在配置类中启用事务
    4. 事务管理员
      1. 负责管理多个事务
    5. 事务协调员
      1. 可以加入到事务管理员的事务被管理
    6. 事物的属性
      1. readonly 设置只读事务
      2. timeout 设置事务超时时间 -1永不超时
      3. rollbackFor 设置事务回滚异常
        1. Error 和 运行时异常才会回滚