Spring的IOC和AOP及数据库读写分离

详情:https://www.zhihu.com/tardis/sogou/art/58006579

实现AOP技术:

1)动态代理: 采用消息截取,对该消息进行装饰,以取代原对象行为的执行;

2)静态织入:引入特定的语法创建方面,使得编译器可以编译期间织入有关的代码;

例如biz层实现打印“你好”,其他类中用ref=”biz.*”,就可以实现打印;

Spring优点:

  1. 降低组件耦合,解耦;
  2. 容易提供众多服务,如事务管理、消息服务等;
  3. 提供单例模式支持;
  4. 容易实现如权限拦截,运行监控功能;
  5. 提供集成支持,如hibernate、JPA、Struts等
  6. 低侵入式,代码污染低;
  7. 独立于各种应用服务器;
  8. 降低业务对象替换的复杂度;
  9. 高度开放,不完全依赖spring;

IO:可以在构造器决定依赖关系的顺序;

AOP:提供声明式事务管理;支持自定义的切面;

面向对象编程时将程序分解为各个层次的对象,面向切面编程时将程序运行过程分解为各个切面;

OOP静态的抽象;AOP动态的抽象;、

静态代理和动态代理

静态代理,运行期编译好的代理;动态代理时运行期间根据需要动态创建的代理及其实例;

代理作用:拦截真实业务对象的访问;代理对象和真实业务对象实现共同的接口或者继承同一类;代理对象时对目标对象的增强,以便对消息进行预处理和后处理。

  1. 静态代理

运行前编译生成.class文件;

三步:定义业务接口;实现业务接口;定义代理类并实现业务接口;客户端调用;

  1. 动态代理

创建被代理的接口和类;

实现InvocationHandler接口,对目标接口中声明的所有方法进行统一处理;InvocationHandler中的invoke()方法是代理类完整逻辑的集中体现,包括要切入的增强逻辑和进行反射执行的真实业务逻辑;

调用Proxy的静态方法,创建代理类并生成相应的代理对象;

使用代理。

  1. jdk动态代理

代理类与代理对象是Proxy的newProxyInstance()方法实现;

实现动态代理关键技术是反射。

详情:https://blog.csdn.net/justloveyou_/article/details/79407248

 

MySQL的读写分离

通过一个主库一个从库,业务服务器把写操作写在主数据库,读操作写道从库,主库与从库同步,保证数据一致性。

适合读多写少;

需要注意:主从同步延迟、分配机制

  1. 主从同步延迟
  1. 二次读取:读从库没读取到就去主库读一下,数据库访问的api进行封装就能实现这个功能。二次读取使得读写分离失效,主库可能爆炸;
  2. 写主库之后马上进行读操作;业务强耦合了;
  3. 关键业务读写都由主库承担,非关键业务读写分离:付款都主库,改头像、个性签名主从分离;
  1. 分配机制

两种方式:代码封装、数据库中间件;

  1. 代码封装:抽象中间层实现读写分离;用provider封装save主库、select从库等数据库操作;

优点:实现简单,可定制化;缺点:宕机就得修改配置重启。

  1. 专门进行读写分离和数据库连接管理,业务服务器和数据库中间件之间通过标准的SQL协议交流。

优点:兼容不同的语言;缺点:多一个系统,多个瓶颈和操作,增加复杂度。

一般先优化慢查询的业务逻辑或加缓存等,没得优化了再集群,先读写分离,还不行就分库分表。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋葱ycy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值