1.1 包结构
1.提供基础ioc能力,我们只需要看core/context/beans即可
2.core提供核心工具类,支持依赖注入
1.asm对应asm字节码框架,读取源class并解析->获取注解/方法/成员变量...
2.cglib对应cglib字节码框架->生成代理bean(有这么一句话,通过spring所有你写的代码,都不是你真正运行的代码,所有对象都不是你直接定义的对象)
3.core->异常处理和版本检测,以及不依赖于特定框架的其他核心支持
4.core.annotation->注解/元注解/属性覆盖的组合注解的支持
5.core.codec -> 编码解码抽象,用于字节响应流和Java对象转换
6.core.convert-> 类型转换
7.core.env -> spring环境抽象由bean定义配置文件和分层属性源支持组成
8.core.io -> 使用(基于文件)资源的通用抽象
9.core.log -> 日志记录约定的有用委托
10.core.serializer -> 序列换和反序列化
11.core.task 对ExecuteService抽象,提供TaskExecutor概念
12.core.type 对于类型的支持,读取注解/类级元数据/路径扫描
beans包
1.factory BeanDefinition/BeanFactory/BeanProcessor等模型和模板扩展点定义
2.propertyeditors 成员变量的处理->不同类型的成员变量提供不同的处理器
3.support 当前包的一些支持能力
4.直接路径下 则是accessor 用于对bean资源的访问
context包
随着spring的发展context扩展成context,context-indexer,context-support context->基础的IOC容器,,基于beans包,封装其能力,增加了国际化,事件传播 context-indexer ->类管理及classpath路径扫描 context-support ->扩展支持,及ioc子容器
context
1.cache -> spring自己做的一个缓存实现
2.context -> 容器模型->ApplicationContext/ConfigurableApplicationContext
ApplicationContextAware/ApplicationStartupAware/EmbeddedValueResolveAware/EnvironmentAware/MessageAware/ResourceLoaderAware
ApplicationContextInitializer
ApplicationEvent/ApplicationEventPublisher/ApplicationEventPublisherAware
ApplicationListener
HierarchicaMessageSource/MessageSource
annotation-> 提供的注解能力,相关selector,reader,parser,registry
config -> 为资源的加载提供parser,通过一个handler注册,为namespace扩展提供基础
context->发布订阅模式,事件广播器,事件模型,监听模型,监听工厂,监听适配器
expression -> 对表达式的支持,指定抽象/简单处理,在模板中体现
i18n->对国际化的支持
index->类似SPI的spring.components的加载
support->一票ioc容器,refresh()模板方法需要的一些处理和支持
比如,PostprocessorRegistryDelegate->针对postProcessor的registry的
一些操作,简单说就是那些都是step,这个是step执行步骤的模板,一个是有哪些
步骤,一个是步骤怎样方式和顺序执行
weaving->对织入的支持,默认提供对appectj支持(以xml形式),同时提供processor扩展支持
3.ejb -> 对ejb定义的实现
4.format -> factorybean为纽带,提供format
5.Instrument.classloading -> 基于java Instrument做的增强
6.jmx -> 对jmx的支持,j2ee(example->log4j的实现常用于运行时修改log级别)
7.jndi -> 对jndi的支持,java对各个组件的命名和文件目录管理,实现解耦
8.remoting -> 对rmi的支持
9.scheduling -> 定时任务
10.scripting
11.ui
12.validation
这里解释一下EJB
EJB 全拼是 Enterprise Java Beans ,定位是java为企业级应用 技术规范,可以理解为java为企业级应用开发制定的标准,这么说可能有一些复杂
我们可以从几个点去理解
1.在没有spring的时候,使用java该如何进行企业级应用开发
2.java推出J2EE的目的是为了什么
3.EJB是一套规范,一套协议
4.如果说EJB是interface的话,spring就是实现了这个interface的子类
5.只不过,java设想的企业级应用都要实现四层模型,客户层,web层,业务层,持久层
6.一整套体系使用j2ee的所有组件,ejb提供各种层级模型的定义,是一个重量级的框架
7.spring的出现简化了客户层(spring mvc),web层和业务层,做到对整个体系的支持而不完全使用j2ee体系
有一句话是顶级的公司制定标准 对于java来说,j2ee就是java为企业级应用制定的技术规范,定义好顶层的接口体系,具体厂商负责实现
1.以jdbc为例,java支持对数据提供访问,定义好顶层接口体系,mysql作为db厂商决定支持java,会提供给你一个jar,内部实现jdbc的接口,完成对数据的访问
2.java为了支持web访问,提供socket,tomcat作为一个支持java的web服务器内部实现了socket协议
3.现在ebj的开发被ssm/ssh/springboot+springcloud 取代了
4.j2ee大致约定了Web应用的整体架构。而且把这方面的需求做了一系列的规范
context-indexer
1.扫描扩展机制
2.@index标识的类,在编译时期会在META-INF目录下生成spring.components
3.启动时@ComponentScan不扫描指定package,而是读取spring.components
context-support
1.cache -> caffeine 一种高效的本地缓存,spring对其集成
ehcache 纯java进程版缓存框架,hibernate默认缓存框架
jcache 符合jsr-107的java缓存
transaction 对spring事务支持的缓存
2.mail -> 直接目录下 mail模型
javamail 具体的mail模型
3.scheduling -> commonj 定时任务-过时
quartz 定时任务
4.ui.freemarker -> 对freemarker的集成,用作jsp模板