学习Spring源码(一)了解Spring何为IOC

11 篇文章 0 订阅
7 篇文章 0 订阅

        打算写一个有关Spring源码和架构的专栏,一是方便自己查看,两一方面方便后来者学习吧。网上有关Spring的文章很多但也参差不齐,真正面向小白的实用行讲解不多。我在这里也算抛砖引玉吧,把自己学习的路线总结下。

1,一本有关Spring的书

         虽然电子书和视频教程也很多,但一本纸质的书也很重要,一部书里的体系完整比较完整,一般也都有简单示例,是你利用碎片时间学习的最好选择,比如睡前或者饭后,一本好的书对你的学习很重要。某一刻某个点也许会给你特别的灵感。这通常是网上杂乱无章的文章所无法比拟的。那这本书应该怎么选择,我觉得有一个原则就是:你去书店看如果20分钟内你能看进去并且还想看就证明这本书适合当前你的水平可以选择购买;如果20分你看不进去证明书太难了,如果看进去了又不想往下看了则证明书的体系太简单或者作者写的不适合你可以放弃。切记不要多买,因为买多了可能造成知识的选择障碍,当然能力特别强除外。。。

2,阅读Spring文档

         网上的文章很多,不过阅读官方的文档学习官方的用例永远是你精准掌握知识的捷径,来看看我们捷径在哪里:

         a.https://spring.io/Spring官网

         b. Spring Framework doc最新的文档和API文档   Spring Framework doc List所有版本文档

 可以看到最新的 Spring Framework 是5.1.2,这个列表里有没有Spring3了,看来未来的趋势还是Spring5,不过在我的专栏里还会讲到Spring3主要和Spring5做比较,看看Spring最新的架构思想。

       Spring5

spring的核心部分包含core,beans,context,expression4个模块
    core:依赖注入IoC与DI的最基本实现
    beans:BeanFactory 接口是 Spring 框架中 的核心接口,它是工厂模式的具体实现。BeanFactory 使用控制反转对应用程序的配置和依赖性规范与 实际的应用程序代码进行了分离。但 BeanFactory 容器实例化后并不会自动实例化 Bean,只有当 Bean 被使用时 BeanFactory 容器才会对该 Bean 进行实例化与依赖关系的装配。
    context 模块构架于核心模块之上,他扩展了 BeanFactory,为她添加了 Bean 生命周期控制、框架事件体系以及资源加载透明化等功能。此外该模块还提供了许多企业级支持,如邮件访问、远程访问、任务调度等,ApplicationContext 是该模块的核心接口,她是 BeanFactory 的超类,与BeanFactory 不同,ApplicationContext 容器实例化后会自动对所有的单实例 Bean 进行实例化与依赖关系的装配,使之处于待用状态。
    expression 模块是统一表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。它的语法类似于传统 EL,但提供了额外的功能,最出色的要数函数调用和简单字符串的模板函数。这种语言的特性是基于 Spring 产品的需求而设计,他可以非常方便地同 Spring IOC 进行交互。

spring的aop部分包含aop,aspects,instrument3个模块
    aop 是以动态代理设计模式为基础,横向的处理业务的方法,比如数据库事务,日志等。
    aspects 模块集成自 AspectJ 框架,主要是为 Spring AOP 提供多种 AOP 实现方法。    
    instrument 模块是基于 JAVA SE 中的”java.lang.instrument”进行设计的,应该算是 AOP 的一个支援模块,主要作用是在 JVM 启用时,生成一个代理类,程序员通过代理类在运行时修改类 的字节,从而改变一个类的功能,实现 AOP 的功能。

spring的数据访问及集成:由jdbc、tx、orm、jms 和 oxm 5 个模块组成。
    jdbc 模块是 Spring 提供的 JDBC 抽象框架的主要实现模块,用于简化 Spring JDBC。主要是提供 JDBC 模板方式、关系数据库对象化方式、SimpleJdbc 方式、事务管理来简化 JDBC 编程,主要实现类是 JdbcTemplate、SimpleJdbcTemplate 以及 NamedParameterJdbcTemplate。
    tx 模块是 Spring JDBC 事务控制实现模块。使用 Spring 框架,它对事务做了很好的封装,通过它的 AOP 配置,可以灵活的配置在任何一层。
    orm 模块是 ORM 框架支持模块,主要集成 Hibernate, Java Persistence API (JPA) 和Java Data Objects (JDO) 用于资源管理、数据访问对象(DAO)的实现和事务策略。
    jms 模块(Java Messaging Service)能够发送和接受信息,自 Spring Framework 4.1 以后,他还提供了对 messaging 模块的支撑。
    oxm 模块主要提供一个抽象层以支撑 OXM(OXM 是 Object-to-XML-Mapping 的缩写,它是一个 O/M-mapper,将 java 对象映射成 XML 数据,或者将 XML 数据映射成 java 对象),例如:JAXB,Castor, XMLBeans, JiBX 和 XStream 等。

spring的Web部分包括:web、webmvc、websocket 和 webflux 4 个模块组成.
    web 模块为 Spring 提供了最基础 Web 支持,主要建立于核心容器之上,通过 Servlet 或者 Listeners 来初始化 IOC 容器,也包含一些与 Web 相关的支持。
    webmvc 模 块 众 所 周 知 是 一 个 的 Web-Servlet 模 块 , 实 现 了 Spring MVC(model-view-Controller)的 Web 应用。
    websocket 模块主要是与 Web 前端的全双工通讯的协议。
    webflux 是一个新的非堵塞函数式 Reactive Web 框架,可以用来建立异步的,非阻塞,事件驱动的服务,并且扩展性非常好。

spring报文发送:即 messaging 模块。
    messaging 是从 Spring4 开始新加入的一个模块,主要职责是为 Spring 框架集成一些基 础的报文传送应用。

spring Test:即 test 模块。
    test 模块主要为测试提供支持的,毕竟在不需要发布(程序)到你的应用服务器或者连接 到其他企业设施的情况下能够执行一些集成测试或者其他测试对于任何企业都是非常重要的。

3,用maven建立项目

         通过以上我们初步了解了Spring的结构和版本变迁,接下来我们现在可以从Spring的核心开始学习Spring的源码了,新建一个Maven工程引入Spring核心包。pom.xml里增加如下配置:

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.1.2.RELEASE</version>
		</dependency>
	</dependencies>

 

 4,对Spring核心IOC控制反转概念的解释

传统

IOC控制反转和DI依赖注入其实就是同个概念的两种不同角度解释。

照传统的JavaSE思想,对象是主动创建的,你需要去NEW对象,例如在A类里,写代码B b = new B();通过new关键字获取B对象,并对B进行控制和维护。

IOC

IOC思想是,对象是容器创建的,我拿过来直接用。在Spring框架里,如果我们需要B这个对象可以通过Spring容器来获取,我们不需要直接去new B(),而是由Spring容器负责创建和获取依赖对象,如果有一天我们不需要B了需要一个C,那么狠简单我们去改下Spring的配置文件就好了,不需要修改A这个java类,这个我们就可以减少代码的耦合和依赖,并且由Spring来管理这些B和C的生命周期,也减少了很多不必要的代码。

IOC是一种很好的解耦合思想,在软件开发中有很好的作用,不仅被应用在JavaEE里,在其它语言里同样适用。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值