【Spring】Spring入门

Spring是一个流行的Java开发框架,以其轻量级、非侵入式编程和依赖注入为核心,简化了企业级应用的复杂性。文章介绍了Spring如何通过POJO、DI和AOP实现松耦合,以及重要概念如容器、bean生命周期,并概述了Spring的模块和最新版本的特性更新。
摘要由CSDN通过智能技术生成

Spring入门

0.引言

Spring框架创立的初衷是简化JavaEE应用程序开发,替代更加重量级的企业级Java技术(EJB等),它确实完成了自己的使命,已经成为当前最流行的Java开发框架,并发展出一个建立在其核心框架之上的庞大生态圈。
Spring也是Java开发者必学的技能,下面我们就来了解这个强大的框架吧!

1.Spring的特点

Spring是如何简化Java开发的?
它的策略是:
1.基于POJO的轻量级和最小侵入性编程。
早期的很多框架会强迫应用继承它们的类或实现它们的接口从而导致应用与框架绑死,而Spring尽力避免自身的API影响应用代码,它不会强迫应用实现其规范接口或继承Spring规范的类(非侵入性),最多会在类上加Spring注解,但类依然是POJO(简单的JavaBean实体类)。这就意味着这个类可以在Spring应用和非Spring应用中发挥同样的作用。

package com.test.springdemo;

public class HelloWorldBean {        //这个类在Spring应用和非Spring应用中都可以使用
    public String sayHello(){
        return "Hello World!";        
    }
}

2.通过依赖注入和面向接口实现松耦合。
应用中的类之间需要相互调用来完成特点功能,而这些引用会导致代码高度耦合、难以测试(引用了其他类的类难以编写单元测试,要考虑其中包含的一连串调用都要测到)、维护、复用,甚至难以理解。为了让应用中的类以适当的方式进行交互,Spring使用了依赖注入(Dependence Injection,DI)策略,即对象间的依赖关系交给系统中负责协调各对象的第三方组件在创建对象时设定(对象无需自行创建或管理他们的的依赖关系)。面向接口是指注入的参数为接口类型,可以是实现了这个接口的各种类,提高了程序的灵活性(易于维护测试)。
3.基于切面和惯例进行声明式编程;
DI能够让相互协作的软件组件保持松耦合,而面向切面编程(aspect-oriented programing,AOP)允许你把遍布应用各处的功能分离出来形成可重用的组件。系统的各个组件出了完成自己的功能外还会有其他一些公共的功能,例如日志、事务管理、安全等,这些公共的系统服务常被称为横切关注点(跨越系统的多个组件)。如果把这些公共代码分散到多个组件中,会带来双重复杂性(这部分公共代码维护困难,组件自身业务代码受影响变得混乱)。AOP能够将这部分代码模块化,再以声明的方式将它们应用到它们需要影响的组件中去,使得各个组件有更高的内聚性且更加关注自身的业务,不再需要关注系统公用功能,即AOP可以确保POJO的简单性。
4.通过切面和模板减少样板式代码。
编程时经常会写一些非常类似的代码,例如JDBC访问数据库查询数据,Spring通过模板封装来消除这些样板式代码,以提高开发效率。例如Spring的JdbcTemplate的queryForObject()只用传入SQL查询语句,就能查询到需要的数据,不需要编写JDBC样式代码。

2.Spring重要概念

为了更好地理解Spring框架,我们需要了解一些重要的基本知识。例如Spring容器、Spring上下文、bean生命周期。

2.1Spring容器

在基于Spring的应用中,应用对象生存与Spring容器(container)中。Spring容器负责创建、装配它们,配置它们并管理它们的整个生命周期。
容器是Spring框架的核心,Spring容器使用DI管理构成应用的组件,创建相互协作的组件间的关联。使这些对象更容易理解、维护、复用、测试。
Spring自带了多个容器实现:1.bean工厂容器;2.应用上下文容器。后者是前者的扩展,功能更加强大,所以更为常用,也是我们主要学习的部分。

2.1Spring应用上下文

Spring自带了多种类型的应用上下文:
1.AnnotationConfigApplicationContext:从基于Java的配置类中加载Spring应用上下文。
2.AnnotationConfigWebApplicationContext:从基于Java的配置类中加载Spring Web应用上下文。
3.ClassPathXmlApplicationContext:从类路径下的XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。
4.XmlWebApplicationContext:从web应用下的XML配置文件中加载上下文定义。
5.FileSystemXmlApplicationContext:从文件系统下的配置文件中加载上下文定义。

//类路径文件读取
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//系统文件读取
ApplicationContext ac = new FileSystemXmlApplicationContext("C:\\Users\\zhy\\Desktop\\bean.xml");
//配置类读取
ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);

//获取bean
IAccountService as = (IAccountService) ac.getBean("accountService3");

2.1bean的生命周期

Spring中bean的生命周期
如上图所示,Spring容器中bean的生命周期是比较复杂的,主要包含四个阶段:实例化Bean,属性填充,初始化Bean,销毁Bean。
其中bean的初始化过程较为复杂,又包括以下步骤:
1.执行Aware接口的方法来获取Spring容器的某些资源;
2.执行BeanPostProcessor的前置处理方法postProcessBeforelnitialization(),对Bean进行一些自定义的前置处理;
3.如果Bean实现了InitializingBean接口,将会执行lnitializingBean的afeterPropertiesSet()初始化方法;
4.调用用户自定义的初始化方法;
5.执行BeanPostProcessor的后置处理方法postProcessAfterinitialization().

Spring组成

前文介绍的Spring框架核心策略DI、AOP、消除样板代码已在简化企业级Java开发上发挥了巨大作用,但Spring的能量绝不止这一点。经过多年的发展,Spring框架已经拓展到了许多开发方向。
Spring模块:
在这里插入图片描述

Spring框架的发布版本包括了20个不同的模块,它们根据功能可以分为6个部分:
1.数据访问与集成。这部分通过抽象样板代码简化数据库部分程序。
2.Web与远程调用。提供了一个强大的MVC框架,还有多种构建与其他应用交互的远程调用方案。
3.面向切面编程。它可以帮助应用对象解耦,可以将遍布系统的关注点(安全、事务等)从它们所应用的对象中解耦处理。
4.Instrumentation。它为Tomcat提供了一个织入代理,能够为Tomcat传递类文件,应用场景较少,不用关注。
5.核心容器。这是Spring框架的最核心部分,管理应用中bean的创建、配置、管理
6.测试。为使用JNDI、Servlet和Portlet编写单元测试提供了一系列的mock对象实现。

Spring几乎为每个领域的Java开发都提供了Spring编程模型,后续可能会用到的还有Spring Web Flow、Spring Security、Spring Data、Spring Boot等。

Spring新功能

目前Spring框架已经更新到了6.0,该版本整个框架代码库现在基于 Java 17 源代码级别,主要更新内容如下:
1.为 AOT 引擎设置引入 builder API
2.支持Spring 应用程序探索虚拟线程,基于 JDK19
3.基于 GraalVM 将 Spring 应用程序编译成原生镜像(native image)
4.将 javax.servlet 迁移到 jakarta.servlet,兼容最新的 web 服务器如:Tomcat 10.1、Jetty 11、Undertow 2.3,最新的持久性框架 Hibernate ORM 5.6.x。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值