Spring 体系结构,核心理念

目录的体系结构的核心组件 的2大特性 | 核心 AOP 面向切面编程中的2个核心概念 容器中用到的设计模式
相关问题
说明
概述 的设计目标
设计目标 | 设计初衷
为了降低Java开发的复杂性,采取了以下4种关键策略
的设计理念
BOP , bean面向bean编程
的优缺点
优点|好处
缺点
的体系结构
是轻量级的一站式开发框架,以 IoC、AOP 为核心 , 集成了Test模块来支持测试,集成了 Data数据访问模块来操作数据源,集成了Web模块来支持web开发 。
的5大版块|功能
Core核心容器模块分为4个小模块
的核心组件
的核心是bean , 核心组件都是围绕bean进行设计的
core模块的
定义对资源的访问,用于加载资源
public interface Resource extends InputStreamSource {boolean exists();default boolean isReadable() {return exists();}default boolean isOpen() {return false;}default boolean isFile() {return false;}URL getURL() throws IOException;URI getURI() throws IOException;File getFile() throws IOException;default ReadableByteChannel readableChannel() throws IOException {return Channels.newChannel(getInputStream());}long contentLength() throws IOException;long lastModified() throws IOException;Resource createRelative(String relativePath) throws IOException;String getFilename();String getDescription();}
接口定义的是通用的资源访问,屏蔽了资源的来源、格式的不同,常见的最终实现类如下
beans模块的
用于描述bean的定义、元数据、bean之间的依赖关系 。
xml文件或注解定义的bean会被转换为实例,存储在中 。
public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement {//scope常量String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE_SINGLETON;String SCOPE_PROTOTYPE = ConfigurableBeanFactory.SCOPE_PROTOTYPE;//role常量,标识bean在系统中的角色int ROLE_APPLICATION = 0;//开发自定义的beanint ROLE_SUPPORT = 1;//spring中对外提供支持、整合能力,暴露给开发使用的beanint ROLE_INFRASTRUCTURE = 2;//基础设施,spring中的基础bean//父BeanDefinition的namevoid setParentName(@Nullable String parentName);String getParentName();//BeanClassName , bean对应的java类的类名void setBeanClassName(@Nullable String beanClassName);String getBeanClassName();//作用域void setScope(@Nullable String scope);String getScope();//懒加载void setLazyInit(boolean lazyInit);boolean isLazyInit();/** 依赖关系 。dependsOn 是当前bean依赖的其它bean的name 。在getBean()中:合并BeanDefinition修改后,会先通过getBean()获取dependsOn依赖的实例 , 保证所有dependsOn依赖都已经实例化,再根据bean的scope调用createBean()创建bean实例 */void setDependsOn(@Nullable String... dependsOn);String[] getDependsOn();/** 自动装配时是否优先选用 。有多个可用实例时,会优先使用primary为true的bean */void setPrimary(boolean primary);boolean isPrimary();//要使用的 FactoryBean 的namevoid setFactoryBeanName(@Nullable String factoryBeanName);String getFactoryBeanName();//要使用的 FactoryMethod 的namevoid setFactoryMethodName(@Nullable String factoryMethodName);String getFactoryMethodName();//构造器的参数表 , 包括参数名、参数类型、参数值ConstructorArgumentValues getConstructorArgumentValues();default boolean hasConstructorArgumentValues() {return !getConstructorArgumentValues().isEmpty();}//属性值 , 包括属性名、属性值MutablePropertyValues getPropertyValues();default boolean hasPropertyValues() {return !getPropertyValues().isEmpty();}//初始化方法void setInitMethodName(@Nullable String initMethodName);String getInitMethodName();//销毁方法void setDestroyMethodName(@Nullable String destroyMethodName);String getDestroyMethodName();//bean的角色 , 比如spring本身的bean、第三方框架的bean、开发自定义的beanvoid setRole(int role);int getRole();//bean的描述文字 。对bean进行简单介绍,主要给其他开发看void setDescription(@Nullable String description);String getDescription();//一些判断方法 。可以把抽象类标识为bean,但抽象类本身是不会实例化的 。boolean isSingleton();boolean isPrototype();boolean isAbstract();//bean对应的Resource的描述信息String getResourceDescription();/** 获取原始的BeanDefinition 。一个bean可以用多种方式共同配置 , 在加载过程中会合并BeanDefinition的修改,这个bean最先解析提取到的BeanDefinition即为原始BeanDefinition */BeanDefinition getOriginatingBeanDefinition();}
beans模块的
是容器的顶级接口 , 定义IoC容器的基础功能,包括bean的创建、装配、获取、管理
模块的

Spring 体系结构,核心理念

文章插图
加载资源、配置得到,根据创建 。
:背景、环境、上下文 , 融合了容器中的各种资源,开发者、第三方类库通过与交互来操作容器、获取容器中的资源,相当于营造的的应用环境、对外暴露的util 。
就是模块中的 。
的2大特性 | 核心 IoC 控制反转
IoC: of ,控制反转,传统应用是由开发者在代码中控制对象的创建,IoC是将对象创建的控制权交给IoC容器,由IoC容器负责对象的创建、管理 。
IoC的优点
IoC常见的实现方式
DL是EJB时代的实现方式,现在主流的实现方式是DI
IoC、DI的关系
IoC是一种编程思想 , DI是IoC的一种实现方式
IoC的实现机制
镜像问题
核心点:工厂模式+反射机制+工厂方法
主要采用工厂模式实现,通过的 () 方法获取所需实例,如果实例不存在,会调用 () 主动创建所需实例 。
创建实例可以使用构造方法方式,实质是通过反射机制调用构造方法创建实例;也可以通过工厂方法创建实例 。
DI的实现原理
镜像问题:是如何实现DI的?
通过 () 获取bean实例时,如果没有对应的实例,会调用 () 创建bean实例 。
在填充属性阶段,根据注入模式选择 () 或 () 进行注入,在注入过程中使用 () 获取所需依赖 。
AOP 面向切面编程
aop: -面向切面编程,是面向对象编程的一种补充,在不改变原有业务逻辑的基础上添加额外的处理 。
aop的优点
把和业务逻辑无关的横切逻辑剥离出来,不与业务代码耦合在一起,减少系统中的重复代码,使系统变得高内聚、低耦合,更易维护 。
aop常见的应用场景
aop中的主要名词|概念
aop的织入时机 | 方式
提供的2种aop实现
1、 aop
早期版本提供的aop实现 , 只提供了简单的aop实现 , 局限多,只能对容器中的bean应用增强 , 只能对方法进行增强 。
Spring 体系结构,核心理念

文章插图
aop默认使用的代理策略、织入时机
aop的实现原理
2、
是一个专业的aop框架,提供了一套完整的aop解决方案,在的后续版本中集成 。比 aop更加强大,可对所有域中的对象进行增强,可对字段、方法、构造方法等内容进行增强 。
的织入时机、原理
性能比较
的应用范围更广、性能更好,比 aop更强大,更常用,也更推荐使用 。
中的2个核心概念 bean
常见问题
传统的java bean
简单来说就是实体类,用来封装对象,包含成员属性和对应的、方法 。
bean
bean是中的核心概念,使用其实是面向bean编程,开发的主要任务就是编写、配置bean 。
中的bean有2层含义
容器
实现了IoC的容器都可以叫做IoC容器,容器只是IoC的一种实现 , 只是IoC容器中的一种,容器 ≠ IoC容器 。
容器提供的功能
中2种容器 | 容器的2个核心接口
相关问题:、的联系与区别
一般把称为低级容器、IoC 容器,把称为应用上下文、高级容器,通常说的容器是指高级容器。
容器的实现原理
镜像问题
提供了2个容器
整合了体系的主要接口,功能齐全,常作为低级容器的实现 。
实现了加载|刷新配置的 () 方法,是的主要实现类 , 也是高级容器最终实现类的共同基类 。
高级容器中内置了低级容器,通过内置的低级容器提供IoC容器的基础功能 。
【Spring 体系结构,核心理念】中用到的设计模式