时隔很多天的我又回来....最近发展了一下自己的爱好,所以拖了很长时间。
前面我们从概念性上分析了spring的特性
这里我们附上Spring框架的结构图
我们简单的来说一些这个框架图
我们从下往上看
1.测试部分Test
Spring提供的测试部分非常重要,这个SpringTest可以帮助我们在服务器上完成测试(即不用每次都重启服务器去测试),跟Junit的测试一样。而且这个SpringTest是可以配合Junit使用的。
2.Spring的核心部分
这里有4个部分 Beans Core Context ExpressionLanguage
Beans 是关于创建Bean和管理Bean的一些类
Core 部分就不多说了,一般核心部分都是最底层的东西
Context 负责上下文的一些类
ExpressionLanguage EL表达式。跟Struts2的OGNL表达式类似
3.AOP,Aspects
这个部分的Instrumentation我没用过,看到的也很少,所以这里就不提了。欢迎评论区补充。这层是切面层。关于AOP,Aspects这里不再做过多的解释了
4.WEB层
主要是关联一些其他的框架,如Struts,SpringMVC,还有一些远程调用。
5.Data Access层
这部分是事务管理和数据源部分。spring有自己的jdbc模版,jdbcTemplate。同样Spring也为其他ORM框架提供了交互层,如:Hibernate,Mybatis,JPA等
IOC是如何工作的呢?
这就是本章我们要研究的问题
1.spring容器
前面我们讲了SpringIOC容器的概念。现在我们通过源码来看一下,SpringIOC容器是什么。
Spring的容器并不是只有一个,Spring自带了多个容器实现,大致可以分为两类
①BeanFactory,提供最基本的DI功能
图1.1 beanFactory的方法
再看一下它的基本实现类
②应用上下文ApplicationContext,它是基于BeanFactory。除了支持基本的DI功能,还支持从属性文件解析文本,以及发布事件给事件监听者,该接口继承多个其他的接口。
图1.2-1 Application接口
我们常用的几个Spring容器的具体实现有:
1.ClassPathXmlApplicationContext
2.FileSystemXmlApplicationContext
这两个是我们在本地引用xml配置文件时用的IOC容器,web的IOC容器我们在后面讨论。这个小节我们讨论IOC容器的具体工作。
Spring加载bean通常称为装配,以下是其中一种模式(XML显示装配)
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("beans.xml");
Car car =app.getBean(Car.class);
System.out.println(car.getBrand()+","+car.getDesc());
以上一段代码包含以下几点:
1.读取配置文件beans.xml
2.根据beans.xml中的配置,找到对应的类的配置并实例化
3.调用实例化后的实例。
实际这3步里执行了多少逻辑对我们是透明的,这几步也许就是它的原理了..
蓝色颜色标注的为相同的(因为线确实扯不过来....),红色的为基本的常用的Spring容器
这是spring的IOC容器的体系结构,了解一下。下一节,来了解IOC容器是如何初始化的。