SpringIOC的特点
在接触Spring的过程中,听到最多的无非两个名词,一个是控制反转一个是依赖注入。实际这是一个意思,控制反转代表原来由程序本身去控制对象之间的依赖关系的这种格局被反转了,通过第三方容器(IOC)去完成控制这些对象的依赖的关系并对它们进行集中管理。
依赖注入:获得依赖对象的过程由自身管理变为了由IOC容器主动注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。
SpringAOP的特点
AOP最多听到的就是面向切面编程,那对于这个名词,我第一次听到的时候也是不能理解的。
下面用一个图和语言来进行描述:
在一个项目中和我们业务逻辑和通用的逻辑区分开来,比如我们的一个系统需要记录日志,记录日志这个事情是通用的,不管你做什么系统一般都会涉及。那么这一块就通过AOP来统一集中实现,统一管理。
生活中的一个例子,你去吃饭之前肯定要洗手,饭后肯定要擦嘴。那么,不管你吃什么饭在哪个地方吃。这些通用的过程你都要执行。那么集中抽象出来这些方法,也就形成了AOP。
SpringIOC容器加载Bean的过程
1.第一步 IOC容器
把xml文件位置信息保存,然后调用refresh方法去重新初始化一个新的IOC容器,Refresh方法中使用obtainFreshBeanFactory去获取,后面的代码是一些BeanFactory创建后的后处理过程
obtainFreshBeanFactory方法里面,我们看到第一行调用refreshBeanFactory的方法去创建。
在方法中去loadBeanDefintions(),使用XMLReader去解析我们的xml配置文件
后面省略一些源码的步骤,主要做的就是对xml文件进行解析成我们要的BeanDefinitions,处理每个Bean元素以及元素中的属性值。最后把beanDefinition注册进我们的BeanFactory中,
2.注入依赖
AOP的两种实现方式 以及小例子
主要是两种,一种是JDK动态代理,一种是cglib代理。
两者的区别:
1.JDK动态代理只能代理实现了接口的类,动态代理类的字节码在程序运行时由Java反射机制动态生成。
2.Cglib是可以代理没有实现接口的类,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,所以不能对final修饰的类进行代理。底层采用ASM实现。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved