以下是https://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/index.html该文章的部分总结

要使用Spring框架就必须用到Spring Beans、Spring Code、Spring Context这三个包,之前自己一直不理解为什么一定要引入这三个包,通过一番查找有了一个大概的了解。

Spring Beans 

Spring Beans 主要负责Bean 的定义、Bean 的创建以及对 Bean 的解析。

Bean 的定义就是完整的描述了在 Spring 的配置文件中你定义的 <bean/> 节点中所有的信息,包括各种子节点。当 Spring 成功解析你定义的一个 <bean/> 节点后,在 Spring 的内部就被转化成 BeanDefinition 对象。以后所有的操作都是对这个对象完成的。

提问:Spring Beans 是如何解析Bean的?

Bean 的解析过程非常复杂,功能被分的很细,因为这里需要被扩展的地方很多,必须保证有足够的灵活性,以应对可能的变化。Bean 的解析主要就是对 Spring 配置文件的解析。

个人理解

个人认为Spring的解析就是Spring Beans 对每个<bean/> 节点进行扫描,获取到Bean的反射路径,然后通过反射获取.Class文件

并通过.Class文件创建对象。当我们单独使用Spring 框架的时候就会发现,代码如下所示:

public void test() {
	ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
	SomeBean someBean= (SomeBean) context.getBean("someBean");
	someBean.doSomething();
}

上面的代码首先通过ClassPathXmlApplicationContext解析beans.xml文件,并返回ApplicationContext容器对象,并通过该对象的getBean方法反射创建实体对象。

Spring Context

从上面的代码可以看出Spring Context 是Spring一个IoC容器,通过容器获取到 ApplicationContext对象,而总的来说ApplicationContext 必须要完成以下几件事:

  • 标识一个应用环境
  • 利用 BeanFactory 创建 Bean 对象
  • 保存对象关系表
  • 能够捕获各种事件

Spring Code