Spring的骨骼架构
Spring的核心组件:Core、Context和Bean;
Spring的设计理念
Spring是面向Bean的编程,Bean是核心组件。Spring解决的问题是,将对象之间的依赖关系转而用配置文件来管理,就是依赖注入机制。
核心组件如何协同工作
- Context发现每个Bean之间的关系,为他们建立关系并维护好这种关系,是一个Bean关系集合,这个集合又叫Ioc容器
- Core就是发现、建立和维护每个Bean之间的关系所需要的一系列工具
核心组件详解
Bean组件
Spring的org.springframework.beans包下所有类解决了:Bean的定义;Bean的创建及对Bean的解析。
Spring Bean的创建是典型的工厂模式:
三个直接子类的区别:
- ListableBeanFactory接口表示这些Bean是可列表的;
- HierarchicalBeanFactory表示这些Bean是有继承关系的;
- AutowireCapableFactory接口定义Bean的自动装配规则;
Context组件
Context在Spring的org.springframework.context包下,主要作用是为Spring提供运行时的环境,用以保存各个对象的状态;
ApplicationContext是Context的顶级父类:
- ApplicationContext继承了BeanFactory,说明Spring容器运行的主体是Bean;
- ApplicationContext继承了Resourceloader接口,使得ApplicationContext可以访问到任何外部的环境
ApplicationContext的子类:
- CongigureApplicationContext表示Context是可修改的,用户可动态添加或修改已有的配置信息
- WebApplicationContext是为Web准备的Context,可直接访问ServletContext。
Application的作用:
- 标识一个应用环境
- 利用BeanFactory创建Bean对象
- 保存对象关系表
- 能够捕获各种事件
Core组件
Core组件包含很多关键类,一个重要的是资源的访问方式。Context把资源的加载、解析和描述工作委托给ResourcePattrenResolve类来完成;
Spring的AOP的特性详解
动态代理的实现原理
Spring的AOP是基于动态代理实现的,JDK的动态代理的类图:
代理模式
代理模式就是给一个对象创建一个代理对象,由这个代理对象控制对原对象的引用,创建这个代理对象后可在调用原对象时增加一些额外的操作;
- Subject:抽象主题,是代理对象的真实对象要实现的接口,当然可由多个接口组成
- Proxy Subject:代理类,除了实现抽象主题定义的接口外,必须持有所代理对象的引用
- RealSubject:被代理的类,是目标对象
Spring中代理模式的实现
策略模式
- Context:使用不同策略的环境,可根据自身条件选择不同的策略实现类完成所要的操作。
- Strategy:抽象策略,定义每个策略都要实现的策略方法
- ConcreteStrategy:具体策略实现类,实现在抽象策略中定义的策略方法
Spring中策略模式的实现
Spring的代理方式有JDK动态代理和CGLIB代理;都使用了策略模式: