第一章 SpringFramework介绍

Spring是一个支持快速开发Java EE应用程序的框架。Spring最早是用来取代EJB的轻量级基础框架,并命名为Spring Framework。随着Spring越来越受欢迎,在Spring Framework基础上,又诞生了Spring Boot、Spring Cloud、Spring Data、Spring Security等一系列基于Spring Framework的项目。

接下来我们就介绍一下Spring Framework,它是我们学习Spring的基础。

在开始使用Spring之前,必须先获取Spring库文件,官方地址为:https://spring.io/projects/spring-framework

我们可以看到Spring Framework版本已经到 6.x.x了。我们下载Spring源码的话,都是通过Spring的官方github去下载。我们可以点击上图中的小猫,或者访问地址: https://github.com/spring-projects/spring-framework/

目前 Spring Framework 的主流版本是 5.X,Spring 5.X 发布于2016年,整个代码库运行在 Java 8之上。我们一般下载编译后的Jar文件包就行了。官方推荐的是 “repo.spring.io” 去下载。这里我推荐去 “Maven仓库” 下载,对应的下载地址为: https://repo1.maven.org/maven2/org/springframework/spring/5.3.39/spring-5.3.39-dist.zip

如果仍然无法下载的话,可以去我的CSDN下载: https://download.csdn.net/download/richieandndsc/89876564

我将 “spring-5.3.39-dist.zip” 解压开,查看里面的文件结构,如下所示

其中 “docs” 里面是文本文档,其中除了api介绍之后,还有reference文档,里面包含了html格式和pdf格式。比如说Spring的核心使用帮助文档 core.html,数据库访问帮助文档 data-access.html,SpringMVC帮助文档web.html 等等,这些对我们学习Spring帮助很大。“libs” 文件夹里面就是已经编译好的Jar库文件,点击进入

这里面共计 66 个Jar文件,每个文件都包含了不同的功能支持,我们可以根据自身项目需求添加使用。 一般做Web开发的话,我们使用的JAR文件如下:

spring-core-5.3.24.jar
spring-beans-5.3.24.jar
spring-context-5.3.24.jar
spring-expression-5.3.24.jar
spring-jcl-5.3.24.jar
spring-aop-5.3.24.jar

以上是Spring框架核心基础模块

spring-web-5.3.24.jar
spring-webmvc-5.3.24.jar

以上是Spring框架的Web模块

spring-jdbc-5.3.24.jar
spring-orm-5.3.24.jar
spring-tx-5.3.24.jar

以上是Spring框架的数据库模块

spring-test-5.3.24.jar

以上是Spring框架的测试模块

我们一般讲这些JAR文件添加到 WEB-INF/lib/ 目录下,这些JAR文件会跟随项目一起打包并部署到运行环境下。

J2EE是企业级开发的标准API,构建在J2SE基础之上。J2EE标准主要有三种子技术标准:WEB技术、EJB技术和JMS。J2EE容器分为WEB容器和EJB容器,Tomcat是Web容器,JBOSS是EJB容器。所以你开发的Web应用程序可以在Tomcat服务器上运行,而你开发的Web EJB应用则只可以在JBoss服务器上运行。EJB是 Enterprise Java Bean 技术的简称。由于早期EJB设计过于复杂,因此并没有得到快速发展,而轻量级的Spring框架成为它的替代品得到广泛使用。Spring的目的是为了解决企业应用开发的复杂性,它的主要功能是使用基本的JavaBean代替EJB,并提供了更多的企业应用功能。JavaBean 是一种Java语言写成的可重用组件,它可以被Servlet、JSP等调用。JavaBean就是一个Java类,它由3部分组成:属性(properties),方法(method),事件(event)。

这里需要大家理解的是,JavaBean是符合一定规范编写的Java类,不是一种技术,而是一种规范。而我们在Spring中使用JavaBean的话,我们就称它为Spring bean吧。Spring bean是任何Spring应用程序的基础,你编写的大多数应用程序逻辑代码都将放在Spring bean中。在 Spring 中,Spring bean的实例化、依赖的实例化、依赖的传入都交由 Spring控制,而不是用new方式实例化对象、通过非构造函数方法传入依赖等常规方式。实质的控制权已经交由程序管理,而不是程序员管理,所以叫做 控制反转(IOC) 。Spring IOC的核心就是动态的向某个对象提供它所需要的依赖对象。这一点是通过 依赖注入(DI) 来实现的。它的底层原理是通过反射技术对Spring bean的属性进行赋值,从而达到对象间的解耦。所以说,IOC和DI是Spring框架最基础的概念和最底层的技术。

使用Spring开发一个应用(Application)的话,就会对应一个 ApplicationContext 类(应用上下文),我们也称它为Spring容器。我们上面已经介绍过了,我们的应用是由实现不同功能的Springbean组成的,而Spring容器则用来管理这些Springbean,这里面就包括Springbean的实例化,以及注入到其他Springbean中。Spring使用了工厂模式来管理这些Springbean。Spring最基本的接口就是BeanFactory,BeanFactory负责配置、创建、管理Springbean。ApplicationContext就是从BeanFactory派生而来的,并且ApplicationContext还可以通过配置的方式实现对Springbean的管理。在本章节中,我们使用xml文件来配置Springbean。接下来,我们在Eclipse中创建一个简单的 “SpringDemo” 的Java普通工程(不是Web工程哦),来演示如何使用Spring来管理Springbean。

接下来,我们来创建一个带有入口main方法的主程类Main.java,如下所示

我们暂且在入口main方法中添加已经测试代码,如下

System.out.println("hello");

然后,我们右击 ”SpringDemo“项目,选择 ”Run AS“ --> ” Java Application“ 运行一下试试。

我们可以在 ”Console“ 控制台面板中看到了运行结果,没有任何的问题。

接下来,我们就给”SpringDemo“项目添加Spring的核心库文件。

同样,我们右击”SpringDemo“项目选择 ”Build Path“ --> "Configure Build Path...",如下所示

我们切换到 ”Libraries“ 选项卡下,然后点击右边的 ”Add External JARs...“ 按钮,找到我们下载的Spring Jar包。我们需要添加的就是spring-core-5.3.39.jar,spring-beans-5.3.39.jar,spring-context-5.3.39.jar,spring-expression-5.3.39.jar,spring-jcl-5.3.39.jar,spring-aop-5.3.39.jar 这六个文件就可以了。

添加成功后,就能在项目工程中看到这些Jar文件了。

接下来,我们需要构建两个Springbean类,例如 SpringBeanA 和 SpringBeanB ,如下所示

package com.demo;

public class SpringBeanA {

	public void test() {
		System.out.println("hello, SpringBeanA");
	}
}
package com.demo;

public class SpringBeanB {

	public void test() {
		System.out.println("hello, SpringBeanB");
	}
}

这两个类拥有相同的test方法,稍后我们还需要进一步调整。接下来,我们需要创建一个applicationContext.xml文件来配置上面两个SpringBean类。我们在包名 ”com.demo“ 上右击,选择 "New" -> "Other..."

输入文件名称 ”applicationContext.xml“,直接点击 Finish 完成

我们点击 ”Source“ 切换到文本编辑模式,输入如下内容

<?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
   https://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean id="springBeanA" class="com.demo.SpringBeanA"></bean>

   <bean id="springBeanB" class="com.demo.SpringBeanB"></bean>

</beans>

其中每一个<bean>配置代表我们的每一个SpringBean类,id代表它的唯一名称,class就是它的全路径。我们写了两个SpringBean类,所以需要配置两个<bean>标签来声明他们的名称和全路径位置。 接下来,我们再次回到入口main方法中,来添加如下代码

package com.demo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class Main {

	public static void main(String[] args) {

		String xmlFile = "src/com/demo/applicationContext.xml";
		ApplicationContext context = new FileSystemXmlApplicationContext(xmlFile);
		SpringBeanA a = (SpringBeanA) context.getBean("springBeanA");
		a.test();
	}
}

上面的代码非常简单,就是使用applicationContext.xml配置文件来实例化ApplicationContext容器类。有了这个类,我们就可以获取到applicationContext.xml配置文件中的任意SpringBean了。这样做的目的是避免随意的new来实例化SpringBean,而是统一由xml配置文件来管理。获取到SpringBeanA这个类的实例后,我们就可以调用它的test方法,在控制台输出文本“hello”,我们可以运行一下,查看结果是否正确。

在我们项目开发中,虽有可以由很多的SpringBean来提供各种不同的功能实现。但是,它们之间并不是独立存在的,而是相互直接 ”调用“ 的关系。例如,我们可以让SpringBeanA来调用SpringBeanB,那么这个该如何实现呢?如果是以前的话,我们需要在SpringBeanA中实例化一个SpringBeanB,然后调用其test方法即可。但是,现在有了Spring容器,我们就不能这么做了。换句话说,SpringBeanA需要依赖SpringBeanB提供的功能,因此我们需要将SpringBeanB注入到SpringBeanA中,然后就可以在SpringBeanA中使用SpringBeanB了。

接下来我们介绍Spring的依赖注入。

我们首先需要在SpringBeanA中做如下修改。

package com.demo;

public class SpringBeanA {

	private SpringBeanB springBeanB;
	
	public void setSpringBeanB(SpringBeanB springBeanB) {
		this.springBeanB = springBeanB;
	}

	public void test() {
		System.out.println("hello, SpringBeanA");
		springBeanB.test();
	}
}

我们给SpringBeanA类中添加了一个属性,就是SpringBeanB这个类(依赖)。但是,我们并没有实例化它,而是通过一个set方法传递(注入)过来一个SpringBeanB的实例。那么,我们在test方法中直接调用了springBeanB的test方法。那么谁来向SpringBeanA中传递SpringBeanB这个实例呢?当然是Spring容器了。这个过程不需要我们干预,Spring会自动完成,我们要做的就是在SpringBeanA中正常使用SpringBeanB就可以了。当然,除了修改SpringBeanA的代码外,我们还需要修改applicationContext.xml配置文件,如下所示

<bean id="springBeanA" class="com.demo.SpringBeanA">
    <property name="springBeanB" ref="springBeanB"/>
</bean>

<bean id="springBeanB" class="com.demo.SpringBeanB"></bean>

我们在SpringBeanA标签中添加了一个<property>子标签,这个子标签就对应了SpringBeanA类中刚刚添加的SpringBeanB属性。<property>中的name代表属性名称(SpringBeanA类中的名称),而ref就代表了下面springBeanB这个<bean>的id属性值。由于两者名称相同,所有可能会导致大家有些混淆。现在,代码和配置都已经修改完毕了,让我们再次运行整个工程,如下所示

第一个hello是SpringBeanA类输出的,第二个hello是调用SpringBeanB类输出的。除了使用set方法进行注入之外,还可以使用类的构造方法进行注入,这里我们就不在详细介绍了。

这里稍微介绍一下Spring Bean的作用域,也就是Spring Bean的生命周期。

这里我们要说一下 applicationContext.xml 中 bean 的配置信息,如下所示:

<bean id="AAA" class="com.demo.AAA" scope="…"></bean>

其中id代表Bean的名称,class代表该类的完整路径,scope用来设置当前bean的作用域(可以理解为生命周期)。而Bean与Bean之间的依赖关系通过子标签<property>来实现,该标签中的name属性就是类属性名称,而ref就是类属性对应另一个bean的id名称。这里我们详细说明一下scope这个属性,它的属性值默认是singleton,也就是单例模式。换句话说,Spring容器仅创建一个Bean实例,每次注入的都是同一个Bean实例。还有一个叫做prototype的原型模式,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象。也就是说,如果我们的SpringBean是有差异化的,我们就可以使用prototype原型模式。在Spring2.0中除了以前的Singleton和Prototype外又加入了三个新的web作用域,分别为request、session和global session。很明显,他们主要用于JavaWeb项目开发中。

本项目是一个基于SSM(Spring+SpringMVC+MyBatis)后端框架与Vue.js前端框架开发的疫情居家办公系统。该系统旨在为居家办公的员工提供一个高效、便捷的工作环境,同时帮助企业更好地管理远程工作流程。项目包含了完整的数据库设计、前后端代码实现以及详细的文档说明,非常适合计算机相关专业的毕设学生和需要进行项目实战练习的Java学习者。 系统的核心功能包括用户管理、任务分配、进度跟踪、文件共享和在线沟通等。用户管理模块允许管理员创建和管理用户账户,分配不同的权限。任务分配模块使项目经理能够轻松地分配任务给团队成员,并设置截止日期。进度跟踪模块允许员工实时更新他们的工作状态,确保项目按计划进行。文件共享模块提供了一个安全的平台,让团队成员可以共享和协作处理文档。在线沟通模块则支持即时消息和视频会议,以增强团队之间的沟通效率。 技术栈方面,后端采用了Spring框架来管理业务逻辑,SpringMVC用于构建Web应用程序,MyBatis作为ORM框架简化数据库操作。前端则使用Vue.js来实现动态用户界面,搭配Vue Router进行页面导航,以及Vuex进行状态管理。数据库选用MySQL,确保数据的安全性和可靠性。 该项目不仅提供了一个完整的技术实现示例,还为开发者留下了扩展和改进的空间,可以根据实际需求添加新功能或优化现有功能。
本项目是一个基于SSM(Spring+SpringMVC+MyBatis)后端框架与Vue.js前端框架开发的网上球鞋竞拍系统。该项目旨在为球鞋爱好者提供一个便捷、高效的在线竞拍平台,用户可以在此平台上浏览、搜索、竞拍心仪的球鞋,并参与到各种有趣的竞拍活动中。 系统的主要功能包括用户注册登录、球鞋信息展示、竞拍活动创建与管理、实时竞拍以及交易安全保障等。用户可以通过注册账号后,浏览平台上发布的各类球鞋信息,包括品牌、型号、颜色、尺码以及当前竞拍状态等。系统支持用户创建和管理自己的竞拍活动,设定竞拍规则和时间,同时提供实时竞拍功能,确保公平、透明的交易过程。 在技术实现上,后端采用SSM框架进行开发,Spring负责业务逻辑层,SpringMVC处理Web请求,MyBatis进行数据库操作,保证了系统的稳定性和扩展性。前端则使用Vue.js框架,结合Axios进行数据请求,实现了前后端分离,提高了开发效率和用户体验。 数据库设计方面,系统采用了MySQL数据库,存储用户信息、球鞋信息、竞拍活动等数据,确保数据的安全性和完整性。此外,项目还包含了详细的文档资料,包括需求分析、系统设计、数据库设计以及测试报告等,为项目的实施和维护提供了有力的支持。 该项目不仅适合作为计算机相关专业学生的毕业设计题目,也适合Java学习者进行实战练习,通过在此基础上进行功能扩展和改进,可以进一步提升编程技能和项目管理能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值