• Spring简介


    Java知识点总结:想看的可以从这里进入

    Spring

    1、 简介


    Spring 是一款主流的 Java EE 轻量级开源框架 ,Spring 由“Spring 之父”Rod Johnson 提出并创立,其目的是用于简化 Java 企业级应用的开发难度和开发周期。

    具体来说Spring是轻量级的IoC(Inverse Of Control:控制反转)和AOP(Aspect Oriented Programming:面向切面编程)的容器框架。Spring之所以成功就是来源于这2个核心理念,而非技术,IoC是其核心,而AOP是重要的功能。

    它提供了表现层SpringMVC和持久层Spring JDBCTemplate以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,所以逐渐称为Java最成功的的框架。

    • 控制反转IoC:Spring通过一种称作控制反转(IoC)的技术促进了松耦合。将以往使用new创建对象的方式,变成Spring提供容器创建对象,然后进行依赖注入。核心思想就是面向接口编程
    • 面向切面AOP:它将日志、安全、事务管理等与业务无关,却为业务模块所共同调用的逻辑封装起来,理解成一个切面,然后将其动态的插入到业务逻辑中,使业务逻辑能方便的使用切面提供的服务。
    • 容器:Spring提供了容器的功能,用来管理对象的声明周期,以及对象之间的依赖关系。(XML文件中定义好对象的名字,设置单例或者原型模式,还有以其他对象的依赖关系,这样在容器启动时这些对象就自动实例化,直接使用。)
    • 依赖注入DI:就是对象之间依赖关系的实现,一般有构造注入、setter方法注入。
    • 一站式:Spring可以在IOC和AOP的基础上整个其他开源框架或第三方的类库。

    时至今日,Spring已经不单单是一项单纯的应用框架技术了,而是已经成发展成了以Spring Framework为基础的一个大家族了,例如 Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spring Data、Spring Security 等,其中 Spring Framework 是其他子项目的基础。这些项目现如今已经涵盖了大多数的领域。

    2、发展


    • 创始人:Rod Johnson(畅销书:Expert One-on-One J2EE Design and Development(2002年出版)、Expert One-on-One J2EE Development without EJB(2004年出版)(Spring的雏形) )

    • 目的:最大的目的就是使JavaEE开发更加容易,是为了解决企业应用开发的复杂性而创建的。

    • 历程

      • J2EE刚开始使用EJB开发,但是学习EJB的高昂代价,和极低的开发效率,极高的资源消耗,都造成了EJB的使用困难。
      • 2002年,Rod Jahnson所著的一本很有影响力的书籍《Expert One-on-One J2EE Design and Development》,书中第一次出现了Spring的一些核心思想,2004年《Expert One-on-One J2EE Development without EJB》,更进一步阐述了在不使用EJB开发JAVA EE企业级应用的一些设计思想和具体的做法。
      • Spring以interface21框架为基础,于2004年3月24日发布1.0正式版本。
    • 理念:Spring致力于提供一个以统一的、高效的方式构造整个应用,并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。Spring不和现有的解决方案竞争,而是致力于将它们融合在一起。

    • Spring版本

      • Spring1.x正式版发布于2004年3月
      • Spring2.x正式版发布于2006年10月,
      • Spring 3.x正式版发布于2009年12月
      • Spring 4.x正式版发布于2013 年,开始支持JDK8,支持Lambda表达式的使用
      • Spring 5.x正式版发布于2017 年
      • Spring 6正式版发布于2022 年,Spring 将 Spring 6.0 称为下一个十年的新开端,直接舍弃了以往版本的 JDK,强制升级到 JDK 17及以上。
    • SSM框架:由Spring+SpringMVC+Mybatis组成

    • Spring家族:以Spring Framework 为基础的众多组件:Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spring Data、Spring Security 等等

    3、优势

    • 方便解耦,简化开发:我们把项目对象的创建权给Spring完成,这样在获取对象是就不需要直接去new,只要去找Spring容器就可以了。在业务层到dao层不需要去new对象,只需要去IoC容器去找相应的对象即可
    • AOP编程支持:通过AOP功能方便进行面向切片编程。
    • 声明事务支持:可以通过配置的方式快速配置方法,进行自动的事务控制,方便程序的开发,大大加快了开发效率。
    • 方便程序测试:整合了JUnit方便进行代码的测试
    • 方便集成各种优秀框架:Stuts、Hibernate、Hessian、Quartz等等各种框架。Spring不和现有的解决方案竞争,而是致力于将它们融合在一起。
    • 降低JavaEE API使用难度:Spring对API进行了简单的封装,方便使用。

    4、体系结构

    image-20210526162017010

    • Core Container:核心容器,提供了Spring的基本功能
      • Spring-Beans:提供了BeanFactory,工厂模式的实现,用于对象bean的管理和创建。IoC和DI功能
      • Spring-Core:核心模块,封装了资源访问、类型转换及一些常用工具类。
      • Spring-Context:上下文模块,在核心模块之上是访问定义配置的所有对象的媒介。对BeanFactory的功能进行扩展,提供了ApplicationContext接口。
      • Spring-SpEL::3.0后新增模块,提供了EL语言的支持。
    • Data Access/Integration:数据访问\集成层
      • JDBC:数据库连接,提供了JDBC抽象层,减少了对数据库的操作编码
      • ORM:提供了“对象-关系”映射框架无缝集成的 API,包括 JPA、JDO、Hibernate 和 MyBatis 等。
      • OXM:提供了支持对象/XML映射的抽象层实现
      • JMS:Java消息传递服务
      • Transactions:支持对实现特殊接口以及所以POJO类的编程和声明式的事务管理。
    • Web
      • Web:针对web开发的集成特性
      • Servlet:Spring-webmvc模块。
      • WebSocket:4.0后新增,提供了WebSocket和SockJS的实现和对STOMP的支持。
      • Protlet:提供了Protlet环境下的MVC实现
    • AOP:面向切面的支持
    • Aspects:AspectJ的集成
    • Test:单元测试和集成测试
    • Instrumentation:类工具的支持和类加载器的实现
    • Messaging:4.0新增,消息传递体系结构和协议
    image-20210526162615472

    5、创建Spring项目


    1. 创建Spring父模,创建后删除src文件

      image-20230226123519930 image-20230226123559442
    2. 创建子模块:NEW MODULE

      image-20230226123639083 image-20230226123715470
    3. 查看pom文件

      image-20230226124234314 image-20230226124250821
    4. 在pom文件中添加依赖(在父模块的依赖,所有子模块都可以使用。在子模块的依赖只能子模块使用)

      需要注意版本,spring6是最新版本,它需要JDK17以上版本才能使用,且其中的 javax开头的API 全部被 jakarta 代替了

      <dependencies>
          
          <dependency>
              <groupId>org.springframeworkgroupId>
              <artifactId>spring-contextartifactId>
              <version>5.3.21version>
          dependency>
          <dependency>
              <groupId>org.springframeworkgroupId>
              <artifactId>spring-contextartifactId>
              <version>6.0.3version>
          dependency>
      
          
          <dependency>
              <groupId>org.springframeworkgroupId>
              <artifactId>spring-testartifactId>
              <version>5.3.21version>
          dependency>
          <dependency>
              <groupId>org.springframeworkgroupId>
              <artifactId>spring-testartifactId>
              <version>6.0.3version>
          dependency>
          
          
          <dependency>
              <groupId>org.junit.jupitergroupId>
              <artifactId>junit-jupiter-apiartifactId>
              <version>5.9.1version>
              <scope>testscope>
          dependency>
          
          
          <dependency>
              <groupId>junitgroupId>
              <artifactId>junitartifactId>
              <version>4.13.2version>
              <scope>testscope>
          dependency>
      dependencies>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
    5. 编写类进行测试

      public class HelloJava {
          public void test(){
              System.out.println("Hello Java");
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
    6. 将类放入到IOC的容器中,让Spring容器管理类的创建(需要创建一个XML文件,放到上下文路径中)

      image-20230226141149520

      
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
      	
          
          <bean id="helloJava" class="com.yu.test.HelloJava"/>
      beans>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    7. 获取类

      @Test
      public void test(){
          //加载XML文件
          ApplicationContext context = new ClassPathXmlApplicationContext("springbeans.xml");
          //从上下文中获取到IOC管理的Bean对象
          HelloJava helloJava = (HelloJava) context.getBean("helloJava");
          helloJava.test();
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      image-20230226141359118

    18、Spring6


    Spring Framework 6.0 于2022年发布,它是Spring一个重大的更新,它直接舍弃了以往的JDK不再兼容,而是直接要求选用JDK17及以上版本。

    Spring6.0已迁移到 Jakarta EE 9+,由 API 的命名空间由 jakarta 取代了以前的 javax (如:javax.servlet-api 变成了如今的 jakarta.servlet-api。由 jakarta 取代 javax。)。

    公告称,不要停留在 Java EE 8 上,建议跃升到 jakarta 命名空间,最好直接跳到 Jakarta EE 10 level。而即将发布的 Spring Boot 3.0.0 版本将包含相应的托管依赖项。

    同时由于 JavaEE的迁移,其 Servlet 中间件也要进行升级,Spring Framework 6.0 支持最新 Web 容器,如 Tomcat 10 / Jetty 11,以及最新的持久性框架 Hibernate ORM 。其中一些基于Servlet的组件也被移除,如:Commons FileUpload 上传组件。同时FreeMarker、JSP也停止了支持,转而把精力放在了基于Restful的Web架构。

    而在SpringMVC的Controller上也有一些变动,现在Spring MVC和Spring WebFlux将不再将类上单独有直接@RequestMapping的Spring Bean视为控制器。在6.0之后默认情况下必须有@Controller或@RestController注解才可以被视为控制器。

  • 相关阅读:
    【SpringMVC学习笔记】
    DMSA(Distributed multi-scenario analysis)
    数据治理-元数据度量指标
    linux基础64——abrtd总结
    esp32 arduino使用多个串口时如何查看serial1,serial2所对应的引脚定义
    Spring IOC容器与 Bean 管理 第3关:Bean 标签中的 scope 属性
    Redis消息队列
    强大的JTAG边界扫描(4):STM32边界扫描应用
    在Jupyter里面安装torch的历程
    FDTD script command(源/监视器)
  • 原文地址:https://blog.csdn.net/yuandfeng/article/details/126763870