Spring系列之Spring架构总览

Spring这个框架相信国内百分之99的公司都在使用,今天我们就来聊一聊这个Spring框架。

 

为什么出现Spring?

如果我们没有Spring,我们的开发模式将会是怎么样的。

1、自己写一个类似的框架。

2、servlet + jsp。

那我们细想下,如果我们用上面的技术开发,我们需要操心什么事情。

1、数据库层面,我们需要手动写事务。

2、网络通信层面,我们需要自己写Socket通信。

3、日志层面,我们需要自己去给每一个点切入。

4、bean管理层面,bean的生成销毁都需要我们自己来关心。

5、就连测试都很难整合进去。

而Spring的出现,它帮我们把这些基础的东西全部做好了,我们拿上手就能够来使用,多么美妙不是。它的出现,真得给我们广大程序员带来了春天。

 

Spring简化开发四个基本策略

1、基于POJO的轻量级和最小侵入性编程。

2、通过依赖注入和面向接口松耦合。

3、基于切面和惯性进行声明式编程。

4、通过切面和模板减少样板式代码。

 

Spring编程思想

所以基于上面的四个基本策略,在java面向对象(OOP,Object Oriented Programming)的基础上,spring又出现了四大编程思想。

1、BOP(Bean Oriented Programming)

理解:原先基于java面向对象思想,所有东西都以对象形式来表现,导致对象new不停,spring觉得这样特别不爽。spring觉得应该可以找到一种东西来描述bean与bean之间的关系,不希望每次人为的重复管理,而是由程序来实现自动管理。所以才有了面向bean编程,BOP。

例子:

class Person{
    Person(){};
}

MemeberService{
    //原来的方式,人工方式
    private Person person = new Person();

    //不需要人工new和赋值,spring帮你完成
     private Person person;
}

2、IOC(Inversion of Control) 

有了上面BOP的思想以后,要进行实际操作就出现了IOC。

理解:控制反转,创建对象的控制权(new)反转。以前谁要用谁new,有了spring之后,所有的bean都由spring来new,所以才叫控制反转。然后,new出来以后的对象需要统一的管理起来,所以才有了IOC容器。(Map)

3、DI(Dependency Injection)

有了IOC容器之后,还得解决对象的赋值问题,所以就出现了思想DI,把手动赋值变成自动赋值。

理解:依赖注入,为了解决对象动态赋值的问题(对象被spring管理了,对象与对象之间的关系需要维持起来),动态调用get、set方法(通过反射)。

4、AOP(Aspect Oriented Programming)

当把对象管理起来以后,spring还想要查询这些对象,方法的流程和状态,就又出现了AOP。

理解: AOP是面向切面编程,也可以理解为是面向规则编程,它切面最大的特点就是功能增强、组合、解耦、制定规则。

 

所以,从它出现的需求可以看出,IOC和DI和AOP三者之间的关系是:

 

spring核心架构图

既然思想有了,那么就要开始落地,我们通过观察spring的核心架构图来看看spring是怎么落地实现的,这里我们基于Spring Framework 5 来分析。

1、Spring Core Container模块(核心容器模块)

spring-core:依赖注入IOC与DI的最基本实现。

spring-beans:Bean工厂与Bean的装配。

spring-context:定义基础的Spring的Context上下文即IOC容器。

spring-context-support:对Spring IOC容器的扩展支持,以及IOC子容器。

spring-contenx-indexer:Spring的类管理组件和Classpath扫描。

spring-expression:Spring表达式语言。

2、Spring AOP模块

spring-aop:面向切面编程的应用模块,整合了Asm,CGLib,JDKProxy。

spring-aspects:集成AspectJ。

spring-instrument:动态Class Loading模块。

3、Spring Data Access模块(数据访问与集成模块)

spring-jdbc:Spring提供的JDBC抽象框架的主要实现模块,用于简化Spring JDBC操作。

spring-tx:Spring JDBC事务控制实现模块。

spring-orm:主要集成Hibernate,Java Persistence API(JPA) 和Java Data Objects(JDO)。

spring-oxm:将Java对象映射成XML数据,或者将XML数据映射成Java对象。

spring-jms:Java Messaging Service能够发送和接收消息。

4、Spring-Web(Web组件)

spirng-web:提供了最基础的Web支持,主要建立于核心容器之上,通过Servlet或者Listeners来实现初始化IOC容器。

spring-webmvc:实现了Spring MVC的Web应用。

spring-websocket:主要是与Web前端的全双工通信的协议。

spring-webflux:一个新的非堵塞函数式Reactive Web框架,可以用来建立异步,非阻塞的事件驱动服务。

5、Spring-message(通信报文)

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

6、Spring-test(集成测试)

spring-test:主要为测试提供支持。

7、Spring集成兼容

spring-framework-bom:Bill of Materials,解决Spring的不同模块依赖版本不同问题。

spring各模块之间的依赖关系,如图:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值