个人名片:
🤡作者简介:一名正在努力地大二在校生
🐝座右铭:不浪费时间,不虚度光阴,才能让自己的生命更加充实且有意义。
🎅社区交流:如果有错误的地方,欢迎各位大佬的指导和指正
🐼学习目标:解决程序每一次出现的BUG
Spring框架
Spring框架概述
Spring是由Rod Johnson组织开发的一个分层的Java SE/EE一站式(full-stack)轻量级开源框架。其核心的理念是控制反转(Inversion of Control,IoC)和面向切面编程(Aspect Oriented Programming, AOP)。其中,IOC是Spring的基础,它支撑着Spring对Java Bean的管理功能;AOP是Spring的重要特性,它通过预编译方式和运行期间动态代理实现程序功能,即可以在不修改源代码的情况下为程序统一添加功能。
Spring贯穿于表现(Web)层、业务逻辑(Service)层和持久(Dao)层,Spring在每个层作用如下:
- 表现层(Web 层):
表现层是用户与系统之间的界面层,它负责接收用户请求并向用户展示相应的数据或页面。在Web应用中,表示层通常由控制器、视图和视图解析器组成。在Spring框架中,表现层通常使用@Controller注解来标识控制器。
- 业务逻辑层(Service 层):
业务逻辑层是整个应用的核心层,它主要包括业务逻辑的实现和业务数据的处理。此层主要负责处理业务流程的逻辑,并与数据访问层和表现层进行交互。业务逻辑层还用于事务的管理和业务逻辑的增强。在Spring框架中,业务逻辑层通常使用@Service注解来标识。
- 持久层(Dao 层):
持久层主要负责数据访问与存储,它与底层的数据源(如数据库、文件系统等)进行交互,执行数据访问、持久化和检索操作。持久层通常采用Spring的JDBC、ORM(如Hibernate、MyBatis)等技术。
Spring框架的优点
-
轻量级:Spring框架是轻量级的,它不强制依赖于应用程序,这意味着Spring框架的核心容器在运行时不需要太多的支持。
-
松耦合:Spring框架支持面向接口编程,它通过依赖注入特性和控制反转容器(IoC容器),帮助实现了松耦合的设计原则。这使得代码更易于维护、测试和拓展。
-
丰富的功能性和非功能性特性:Spring框架提供了大量的功能性和非功能性特性,包括事务管理、安全性、AOP(面向切面编程)、ORM(对象关系映射)、数据访问、缓存管理等。
-
增强和扩展:Spring框架的核心容器是一个扩展性良好的容器,可以方便地集成第三方框架,比如Hibernate、MyBatis,从而使得应用能够享受这些框架的优势。
-
简化开发:Spring框架提供了诸多开发模板,例如 JDBC、JPA、JMS等,它还支持声明式事务管理,帮助开发者更方便地编写应用程序逻辑。
-
测试性和可维护性:Spring框架的组件化特点、依赖注入以及面向接口编程的优势,使得应用程序更容易测试和维护。
-
开放源代码:Spring框架是一个完全开放源代码的框架,因此用户可以根据自己的需求进行修改和定制。
Spring框架的体系架构
Spring框架是模块化的,开发者可以选择使用需要的模块,而无需导入其他模块,下面通过一张图展示Spring框架的体系架构。
1. 核心容器
核心容器模块在Spring的功能体系中起着支撑作用,是其他模块的基石,它包含以下模块:
- Beans模块提供BeanFactory功能,是工厂模式实现的基础。
- Core模块提供框架的基础部分,具有IoC(控制反转)和DI(依赖注入)功能 。
- Context模块建立在Core模块和Beans模块的基础上,是访问对象的中介。
- SpEL(Spring expression language,Spring表达语言)模块可以在运行时查询和操作数据。
2. 数据访问/集成
数据访问及集成模块用于访问和操作数据库中的数据,它包含以下模块:
- JDBC模块负责数据库资源管理和错误处理。
- ORM(Object-Relational Mapping)用于将对象模型和关系数据库之间的数据互相转换和映射。
- OXM(Object-XML Mapping)用于将对象模型和XML(可拓展标记语言)数据之间进行转换和映射。
- JMS(Java Message Service)是一种用于在应用程序之间进行异步消息通信的Java API,为分布式应用程序提供了一种可靠、异步、基于消息的通信机制,使得不同的应用程序能够通过发送和接收消息来进行通信。
- 事务模块通过在POJO(实体类)中实现指定的接口,提供对类的事务管理服务。
3.Web
Web模块提供了广泛的功能和特性,用于构建基于Web的应用程序。它的实现基于ApplicationContext,提供了Web应用的各种工具类,包含的模块如下:
- Web模块提供面向Web的基础技术支持,例如文件上传、使用Servlet监听器和基于Web的应用程序上下文初始化IoC容器。
- Web-MVC模块包含Spring对MVC(Model-View-Controller,模型-视图-控制器)开发模式的实现,用于构建灵活的Web应用程序。
- Web_Socket模块提供对基于Web_Socket的客户端与服务器双向通信的Web应用程序的支持。
- Web_Portlet模块是基于Web-MVC模块的Portlet实现。Portlet是一种用于构建基于服务端的用户界面组件的规范,它通常用于构建门户网站、企业应用程序和其他类型的Web应用。
4.其他模块
- AOP模块主要用于实现面向切面编程,我们在程序中可以定义方法拦截器和切入点,将代码按照功能进行分离,以降低程序的耦合性。
- Aspects模块提供了AspectJ集成,为面向切面编程提供了多种实现方法。
- Instrumentation模块提供了对类工具的支持,且实现了类加载器。
- Messaging模块提供了对消息处理的支持,包括用于构建消息驱动应用程序或者对消息队列(如JMS)进行集成。
Spring入门程序
通过前面的介绍,下面通过一个简单的入门程序演示Spring框架的使用,在程序控制台打印“某某:欢迎来到Spring”,具体操作如下:
- 打开Idea创建一个名称为Spring_Demo的Maven项目,然后在pom.xml文件加载所需使用的Spring Jar包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Spring_Demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--Spring的基础包Spring-core-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--Spring的基础包Spring-beans-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--Spring的基础包Spring-context-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--Spring的基础包Spring-expression-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--Spring的依赖包commons-logging-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
2. 在Spring_Demo项目的src/main/java目录下创建com.example包,并在该包下创建名称为HelloSpring类,在类中定义userName属性和hello()方法,具体代码如下:
package com.example;
public class HelloSpring {
private String userName;
public void setUserName(String userName) {
this.userName = userName;
}
public void hello(){
System.out.println(userName+":欢迎来到Spring");
}
}
3.在Spring_Demo项目的src/main/resources目录下,新建applicationContext.xml文件作为Hello Spring类的配置文件,并在applicationContext.xml配置文件中创建Id为helloSpring的Bean,具体步骤及代码如下:
<?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">
<!-- 将指定类配置给Spring,让Spring创建HelloSpring对象的实例 -->
<bean id="helloSpring" class="com.example.HelloSpring">
<!-- 为userName属性赋值 -->
<property name="userName" value="小明"></property>
</bean>
</beans>
4.在SpringDemo项目的src/test/java文件夹下创建测试类TestHelloSpring,在main()方法中初始化Spring容器并加载applicationContext.xml配置文件,通过Spring容器获取HelloSpring类的helloSpring实例,然后调用HelloSpring类中的hello()方法在控制台输出信息。操作步骤、代码及输出结果如下: