Spring的核心组件:Core、Context和Bean;
Spring是面向Bean的编程,Bean是核心组件。Spring解决的问题是,将对象之间的依赖关系转而用配置文件来管理,就是依赖注入机制。
Spring的org.springframework.beans包下所有类解决了:Bean的定义;Bean的创建及对Bean的解析。 Spring Bean的创建是典型的工厂模式: 三个直接子类的区别:
ListableBeanFactory接口表示这些Bean是可列表的;HierarchicalBeanFactory表示这些Bean是有继承关系的;AutowireCapableFactory接口定义Bean的自动装配规则;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组件包含很多关键类,一个重要的是资源的访问方式。Context把资源的加载、解析和描述工作委托给ResourcePattrenResolve类来完成;
Spring的AOP是基于动态代理实现的,JDK的动态代理的类图:
代理模式就是给一个对象创建一个代理对象,由这个代理对象控制对原对象的引用,创建这个代理对象后可在调用原对象时增加一些额外的操作;
Subject:抽象主题,是代理对象的真实对象要实现的接口,当然可由多个接口组成Proxy Subject:代理类,除了实现抽象主题定义的接口外,必须持有所代理对象的引用RealSubject:被代理的类,是目标对象Spring的代理方式有JDK动态代理和CGLIB代理;都使用了策略模式: