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 和 运行时异常才会回滚