spring框架有两个重要的功能是IOC和AOP
IOC(依赖注入):将对象的创建和依赖关系交给容器进行管理,简化了开发过程。
AOP(面向切面):spring通过预编译方式和运行期动态代理的方式在不修改源代码的情况下,给程序添加功能的一种思想。
springIOC工作原理:
springIOC最重要的单个包是beans,context,core包
其中最重要的两个接口是:BeanFactory和BeanDefinition
BeanFacoty:是springIOC核心工厂接口,根据对象的依赖关系进行创建对象。ApplicationContext就是其中的一个具体实现。
要定义一个工厂必须满足三个条件
①需要持有各种bean的定义
②需要持有bean之间的依赖关系
③需要读取xml配置文件的工具
BeanDefinition:是spring中bean的定义接口,该接口继承了两个接口,AttributeAccessor和BeanMetadataElement。AttributeAccessor是core包下的,使bean定义的接口具有处理属性的能力。BeanMetadataElement是bean包下的,它可以获得bean的配置定义的一个元素。在xml文件下,就是会持有bean的一个标签。
BeanFactory持有bean的定义是通过Map集合实现的(BeanName是key),Map集合是Map<String,BeanDefinition>而非Map<String,Object>,是因为bean的初始化是可控的,可以在启动容器时创建实例,也可以在使用才创建实例。通过lazy-init属性来实现 (默认为false)
bean的初始化过程就是往Map集合里面注入内容。
其过程分为三部分:定位(xml文件的位置)、解析、注册(将BeanName和对应的BeanDefinition添加到Map中去)
解析过程:先通过Reader读取xml文件,然后通过documentLoader将资源转化为Document,最后通过SAX解析器解析Document文件。
SpringAOP工作原理:
其中重要的接口有:
Advice:是一个超级接口,扩展了很多的子接口,如AfterAdvice和BeforeAdvice。作用是给目标对象添加的方法
PointCut:决定需要切入的方法
Advisor:通知者。Advisor依赖于Advice,而Advisor的子接口,PointAdvisor还依赖于PointCut.。作用:该接口确切的包含了要通知谁和要通知什么。
FactoryBean:该接口是产生Bean的特殊Bean
FactoryBean的实现类ProxyFactoryBean:产生Proxy的Bean,也就是产生一个加强的Bean
该对象最重要的两个属性是:interpretorNames和targetName,interpretorNames该属性是确定需要加强哪些东西以及怎么加强。targetName该属性是目标对象。