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