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>
        <!--  Spring 核心依赖    需要选择一个版本 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.21</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.3</version>
        </dependency>
    
        <!--  Spring test测试    需要选择一个版本-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.21</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>6.0.3</version>
        </dependency>
        
        <!--junit5和4 选择一个使用-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>
        
        <!-- junit4的依赖 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
  5. 编写类进行测试

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

    image-20230226141149520

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
    	
        <!-- 这个就是将HelloJava这个类放入IOC容器中进行管理,id是对象名,class是类的位置-->
        <bean id="helloJava" class="com.yu.test.HelloJava"/>
    </beans>
    
  7. 获取类

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

    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注解才可以被视为控制器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰 羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值