本项目是一个精简版的spring,通过自己实现一遍spring来理解spring框架的精华。
- 最基本的容器: 使用BeanFactory来获取bean,使用BeanDefinition来封装bean对象。
- 将bean创建放入工厂: 设置beanClass的名称,通过反射来创建bean。
- 为bean注入属性: 使用PropertyValue对象来存储bean的属性信息,使用ConstructorValue来存储构造器属性信息。
- 读取xml配置来初始化bean: 引用XMLBeanDefinitionReader来读取xml中的信息,并将xml中的信息转化为BeanDefinition和PropertyValue
- 实现ApplicationContext: 自动初始化所有bean
aop的实现遵守的aop联盟的规定,所以需要先引入aopalliance.jar。
- 实现简单版的jdk和cglib的动态代理: jdk动态代理通过InvocationHandler实现,缺点是必须需要代理的类必须实现了接口才能被jdk代理;CGLIB是一个基于ASM的字节码生成库,它允许我们在运行时对字节码进行修改和动态生成,CGLIB通过继承方式实现代理。
- 通过ProxyFactoryBean来实现aop和ioc的结合。
- 实现BeanFactoryAware接口,将beanFactory注入到ProxyFactoryBean中
- 实现FactoryBean,获取代理对象
- 实现引入: 对类的功能增强,实现原来类未实现的接口
- 实现切面功能: 即通知点和通知的结合
- 实现aop自动代理,扫描 Bean 名称
- 接入aspectj,实现注解式配置切面
- 对java中的一些概念有了更深入的理解,比如java内省、javaBean 等。
- 阅读源码能力得到增强,现在读spring的源码,再也不会迷路了。
- 当自己写好一个功能后,再去看看spring是怎么实现的,会有种恍然大悟的感觉!