剑指Spring源码
spring架构图
Core Container:是spring构建的基础,所有模块都在该基础之上
- Beans:所有应用都要用到,包含访问配置文件,创建和管理bean以及进行IOC和DI操作相关的类,其中BeanFactory是spring框架的核心接口。
- Core:包含spring框架的基本核心工具类,是其他组建的基本核心
- Context:spring的上下文,又称为ioc容器,通过上下文可以获取容器中的bean,ApplicationContext接口是context的关键,是beans模块BeanFactory的扩展。与beanFactory言辞加载策略不同,ApplicationContext容器实例化后会自动对所有的单实例bean进行实例化,以及相关依赖关系的装配,使之处于相关待用状态,构建与beans和core基础之上。
- 提供了类似于jndi注册器框架式的对象访问方法。
- spEL:提供了强大的表达式语言,用于在运行时查询和操纵对象,可用于将一个bean注入另一个bean,还支持bean的方法调用。
Core Container上层
- AOP:是jdk的动态代理及cglib动态代理为基础,设计出来一系列的方法级别的动态代理横切实现,比如前置通知,返回通知,异常通知。
- Aspects:集成至AspectJ框架,和Instrumentation一样,主要是为AOP提供多种aop实现方法。
- Instrumentation:aop的一个资源模块,前面aop和aspects是针对方法级别的切面编程。这个是实现对象级别的切面编程。作用是在jvm启动时生成代理类,通过代理类,在运行时修改类的字节,从而改变一个类的功能。
- Messaging:可以解读为spring的报文。可以和市面主流消息队列,例如kafka进行消息生成和消费的集成
Spring基础核心模块
- spring-core:
- 包含核心工具类,其他组件都要是通道这个包中的类。
- 定义并提供资源的访问方式。将其读入内存进行解析。为spring的ioc和di提供最基础的服务
- spring-beans:将对象包装在bean中进行管理,从而达到对对象管理和额外操作的目的,从而将对象之间依赖关系转而以配置文件和注解进行管理。(BeanFactioy最重要)
- bean的定义
- bean的解析
- bean的创建
- spring-context:发现每个bean之间的关系,为他们建立这种关系。是bean之间关系的集合
- 给spring提供运行时的环境,保存对象状态。bean包装的是object,object有数据,给这些object提供生成环境。
- 扩展了BeanFactory(ApplicationContext是该模块的核心接口)
- spring-aop:最小化动态代理的实现
- jdk动态代理(基于接口实现)
- cglib(基于类实现)
- 两者共同点就是只能使用运行时的织入,仅支持方法级编织,仅支持方法执行切入点。
- spring-core:
注解:31_注解
工厂模式:6_设计模式 工厂模式
反射:30_反射
IOC容器的实现:
创建注解:
- controller
- services
- responsity
提取标记对象
指定范围获取范围内的所有对象。
遍历所有的类,获取被注解标记的类并加载进入容器中。
设置包下类集合。
- 获取项目类加载器。
- 通过类加载器获取到加载资源。
- 依据不同资源类型,采用不同的方式获取资源的合集。
获取classLoader
实现容器
依赖注入