Spring学习(一):框架概述

什么是spring?

  • Spring是一个轻量级Java开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发
  • Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发
  • Spring可以做很多事情,它为企业级开发提供给了丰富的功能,但是这些功能的底层都依赖于它的两个核心特性,也就是依赖注入(dependency injection,DI)和面向切面编程(aspect-oriented programming,AOP)

Spring的相关概念

IOC(控制反转)

把对象创建和对象之间的调用过程,交给 Spring 进行管理。
创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件控制,侧重于原理

DI(依赖注入)

创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现

AOP(面向切面编程)

不修改源代码,在主干功能里面添加新功能

Spring的优缺点

优点

  • 方便解耦,简化开发
    Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护,交给Spring管理
  • AOP 编程支持
  • 方便程序测试
    Spring对Junit4支持,可以通过注解方便的测试Spring程序
  • 方便和其他框架进行整合
    其内部提供了对各种优秀框架的直接支持如Struts、Hibernate、MyBatis等
  • 声明式事务支持
    只需要通过配置就可以完成对事务的管理,而无需手动编程
  • 降低 API 开发难度
    对一些难调用的API都进行了封装,比如JDBC

缺点

  • Spring依赖反射,反射影响性能
  • 使用门槛升高,入门Spring需要较长时间

Spring由哪些模块组成

Spring 总共大约有 20 个模块, 由 1300 多个不同的文件构成。 以下是 Spring 5 的模块结构图:
在这里插入图片描述
spring-beans、spring-core、spring-context 和 spring-expression(Spring Expression Language, SpEL) 4 个模块是Spring的核心模块

  • spring core:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能
  • spring-beans:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean
  • spring-context:构建于 core 封装包基础上的context 封装包,提供了一种框架式的对象访问方法
  • spring-jdbc:提供了一个JDBC的抽象层,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析, 用于简化JDBC
  • spring-aop:提供了面向切面的编程实现,让你可以自定义拦截器、切点等
  • spring-web:提供了针对 Web 开发的集成特性,例如文件上传,利用 servlet listeners 进行 IOC容器初始化和针对 Web 的 ApplicationContext
  • spring-test:主要为测试提供支持的,支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试

Spring 框架中都用到了哪些设计模式

  • 工厂模式
    BeanFactory就是简单工厂模式的体现,用来创建对象的实例
  • 单例模式
    Bean默认为单例模式
  • 代理模式
    Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术
  • 模板方法
    用来解决代码重复的问题。比如RestTemplate, JmsTemplate, JpaTemplate
  • 观察者模式
    定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener

自愿打赏成功后发送截图到邮箱1271826574@qq.com可获取Spring相关文章的MarkDown源文件(一共6个),邮件标题为:需要一份spring_note。