我是靠谱客的博主 落寞硬币,最近开发中收集的这篇文章主要介绍spring源码分析和IOC容器设计spring源码(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

spring源码(一)

spring全家桶

脚手架 springboot
微服务springcloud 等等

spring优势:

1、源码设计优雅,设计模式的优秀实践者。
2、对大量第三方框架的优秀集成支持和整合。
3、模块化思想。

读源码讲究:原则,方法

1、定焦原则。抓主线,主线外的逻辑不过多关注。
2、宏观原则。关注结构和流程,不过多关注细节,淡化具体代码。
3、善用debug断点调试工具,观察调用栈,关注触发逻辑
4、善用工具查看代码的上级调用方,如idea的 find usage功能
5、经验:观察代码命名规律,见名知意。
6、研究必须使用源代码,反编译存在失真。

核心思想:IOC和AOP

所有思想的核心围绕解耦展开,使代码易于扩展和维护。扩展>修改

1) IOC思想

1、IOC:控制对象的实例化。所谓控制反转就是执行代码将对象的实例化过程交给了springIOC容器去操作。负责对象创建和管理的。解决了程序解耦,面向接口编程。
2、new 对象的方式实例化会造成service层的实现类和dao层的实现类紧密耦合,当需要切换dao层实现类的时候必须改service代码。既不符合面向接口开发的最优原则。

2) IOC和DI(依赖注入)的区别

描述的是同一件事(对象实例化及依赖关系维护),角度不一样。IOC是站在对象的角度,DI是站在容器的角度(动作)通过容器把依赖的对象送过去。

1、实现方式:

(1)可以用反射实例化。class.forName("权限定类名")
(2)通过工厂反射实例化,全限定名配置化

2、工厂模式:

饿汉式:在对象使用之前已经实例化
懒汉式:在使用时再去实例化由@Lazy注解控制,例如:
//懒汉式实例化
@Bean
@Lazy
public User user() {
return new User();
}

3、默认情况下,springIOC都是单例的!如果在配置对象的方法之前,补充添加@Scope注解,且注解参数配置为prototype时,就不是单例的了!例如:

@Bean
@Scope("prototype")
public User user() {
return new User();
}

4、对象传值两个方式:
构造函数;
set方法传值

AOP:声明式事务

springAOP核心是通过动态代理方式,由动态代理对象在实际业务逻辑前或后执行一段需要插入的逻辑。实际上jvm执行的是动态代理对象。

1、事务控制:

service事务控制
  • 数据库事务归根结底是connection的事务,connection是连接对象、commit()提交事务、rolback()回滚事务
    connetction默认自动提交事务;setAutoCommit可以设置是否自动提交

2 控制思路:

 让connection和线程绑定,同一个线程都使用同一个connection,设置connetcion不自动提交。方法执行结束后统一commit提交。主要还是利用了数据的支持。如果数据库不支持,这个方法行不通。

3、实现

使用动态代理在目标方法执行前,获取当前线程的connectiond对象开启事务手动提交,方法执行抛出异常则roback回滚,方法正常执行结束后在代理对象中操作提交

  • 使用 jdk 动态代理(被代理对象必须实现接口,参数需要)
Object proxy = Proxy.newProxyInstance(被代理对象接口class.getClassLoader(),
被代理对象接口class.getInterface(),
// 匿名内部类 描述增强的逻辑是什么
new InvocationHandler(){
@Override
public Object invoke(
//代理对象本身
Object porxy,
//所调用的代理对象中的方法
Method method,
Object[] args
)
})
  • cglib动态代理 (被代理对象可以没有接口)
Enhancer.create(接口名,new MethodInterceptor()){
@Override
public Object intercept(Object o,Method method,Object[]
objects,MethodProxy methodProxy)throws Throwable{
method.invoke(接口名,objects);
}
}

下一章 springAOP使用和核心

最后

以上就是落寞硬币为你收集整理的spring源码分析和IOC容器设计spring源码(一)的全部内容,希望文章能够帮你解决spring源码分析和IOC容器设计spring源码(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部