spring源码解析-开篇
做javaweb接触最多的框架莫过于spring了,随着对框架使用的逐渐熟练要再上一层的话,必须了解框架底层的实现原理,乃至自己做一个框架
spring的两大核心支柱:IOC和AOP
我们先从IOC开始入手
基于spring4.3.2源码分析
什么是IOC
IOC即”控制反转”,不是什么技术,而是一种设计思想.ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.
简单的用代码表示就是
//原来方式
User user=new User();
//IOC获取实例
User user = (User) factory.getBean("user");
IOC容器设计图
从图上可以看到BeanFactory
是最顶层的接口,在spring中所有的Bean都由BeanFactory管理,BeanFactory里面包括的IOC最基本的方法比如getBean
,其子接口在其基础上细化了更多的功能,比如AutowireCapableBeanFactory
这个容器中就添加了创建Bean和初始化Bean等方法
编程式使用IOC
开始分析源码前先使用编程式使用IOC用于调试,使用编程式而没有采用常用的注解,是因为编程式可以很清晰的看出IOC其关键类和基本的流程
//定位resource
ClassPathResource res = new ClassPathResource("spring-mvc.xml");
//创建工厂
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
//选择资源读取器
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
//读取资源,并将结果放入工厂
reader.loadBeanDefinitions(res);
//获取对象
User user = factory.getBean("user", User.class);
IOC基本流程
后面的文章将会对这几个步骤分别分析,了解spring是如何实现IOC的