- 首先在spring配置类中配置 SqlSessionFactoryBean ,配置configuration,解析配置文件中指定的xml路径,加载映射文件,构建SqlSessionFactory
- 通过MapperScan注解中的@import方法MapperScannerRegistrar#registerBeanDefinitions#registerBeanDefinitions中使用mybaits的扫描器
- MapperScannerConfigurer实现了BeanDefinitionRegistryPostProcessor,会在spring#invokeBeanFactoryPostProcessors中调用postProcessBeanDefinitionRegistry调用其中ClassPathMapperScanner扫描
- ClassPathMapperScanner被myabtis重写了扫描接口,中都doScan扫描中设置自动装配AUTOWIRE_BY_TYPE来降ClassPathMapperScanner中使用的对象通过set方法注入,重写isCandidateComponent扫描是接口的类并且是独立的类,然后循环动态代理将接口注册到ioc容器中
aop 先标记你要不要代理,然后bean初始化后开始搞事(循环依赖也可能做),把这个增强bean指定的切面东西全部出来了,就是那些注解的方法,然后根据前置 后置 后置返回 环绕通知 取出来他们几个,然后排序
默认 给了一个作为下标0也就是第一个try。下标1是异常通知第二个try,下标2是前置通知但是也是在try里面的还做了取返回值为了给下标3使用同时这个try的finally里面执行后置通知
下标3返回通知
事务
-
开启事务
- @EnableTransactionManagement开启事务注解,@import(TransactionManagementConfigurationSelector.class) import会在spring解析的时候调用;其中AutoProxyRegistrar(实现ImportBeanDefinitionRegistrar会在扫描@import注解后调用registerBeanDefinitions注册InfrastructureAdvisorAutoProxyCreator事务后置处理器,如果开启了切面注解则会被AnnotationAwareAspectJAutoProxyCreator后置处理器覆盖其中有个排序覆盖);ProxyTransactionManagementConfiguration配置类配置BeanFactoryTransactionAttributeSourceAdvisor(注册一个内置的Advisor) 事务的属性源(解析事务注解的) 拦截事务的方法 (增强代码的),adivse增强代码处理事务pointcut匹配是否 - 符合创建动态代理;
-
解析advisor
- createBean->
创建动态代理
- createBean->
执行方法
兔子mq
应用解耦
异步提速
削峰
复杂度高
服务端有个
return
confirm ack nck
客户端有个确认
5中模式
简单 服务 mq 客户
发布订阅 服务 mq 客户 客户
路由 服务 路由 mq 客户
主题模式 服务 路由key mq 客户