Spring
- 概述
- 特点
- Spring 程序
- 遇到的问题与解决
概述
Spring 是 Java EE 编程领域中的一个轻量级开源框架,由 Rod Johnson 在 2002 年最早提出并随后创建,目的是解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架 。其中,轻量级表现在 Spring 是非侵入式的,即开发应用中的对象可以不依赖于 Spring 的 API 类。另外,Spring 针对 Java EE 的三层结构提供了不同的解决技术
- 表现层(Web): 提供了对 Spring MVC、Struts2 等框架的整合
- 业务层(Service): 提供了管理事务和记录日志的功能
- 持久层(Dao): 提供了 MyBatis、Hibernate 和 JDBCTemplate 等技术的整合
Spring核心技术:IoC 和 AOP
IoC(Inverse of Control,控制反转):一种设计思想,指导设计低耦合的程序。在 Spring 中提供了 IoC 容器,我们无需主动创建对象,而是由容器帮助我们创建管理对象以及处理对象之间的依赖关系。即将组件间的依赖关系从程序内部提取到外部进行管理
AOP(Aspect Oriented Programming,面向切面编程):通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。即将非业务逻辑代码(如日志、事务、权限认证等)封装到一个可重用模块,并且与业务逻辑代码分离,还能够 织入 到业务方法中,从而降低模块之间的耦合度,提高程序的可重用性,提高开发的效率
注:织入指非业务逻辑代码插入到目标对象的过程
特点
Spring 具有以下特点:
- 方便解耦,简化开发。
通过 Spring 提供的 IoC 容器,创建对象的过程交给了 Spring 进行管理来避免硬编码所造成的过度程序耦合。同时,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。- AOP 编程的支持。
通过 Spring 提供的 AOP 功能,方便进行面向切面的编程,实现对程序进行权限拦截、运行监控等功能。- 声明式事务的支持。
在 Spring 中,通过声明式的方式完成对事务的管理,而无须手动编程,提高开发效率和质量。- 方便程序的测试。
在 Spring 中,可以用非容器依赖的编程方式进行几乎所有的测试工作。如:Spring 对 Junit4 支持,可以通过注解方便的测试 Spring 程序。- 方便集成各种优秀框架。
在 Spring 中,不排斥各种优秀的开源框架和降低了各种框架的使用难度,还提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。- 降低 Java EE API 的使用难度。
在 Spring 中,对很多难用的 Java EE API(如JDBC,JavaMail,远程调用等)提供了封装,使这些 Java EE API 的使用难度大为降低。
Spring 程序
下面简单熟悉一下创建 Spring 程序的过程,相关知识后面再作讲解。( 以 JDK 16.0.2 为例 )
1.打开 IntelliJ IDEA ,依次点击 File 、New 和 Project…
2.点击 Maven ,直接点击 Next 。随后,根据自身习惯填写即可。
3.完成项目创建后,在 java 文件中创建一个 demo 包,然后分别创建 接口DemoDao 、实现接口的类DemoDaoImpl 和 测试类Demo 。
// DemoDao接口
package cn.edu.demo;
public interface DemoDao {
public void test();
}
// DemoDaoImpl实现接口
package cn.edu.demo;
public class DemoDaoImpl implements DemoDao {
@Override
public void test() {
System.out.println("Hello World");
}
}
// Demo测试
package cn.edu.demo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
DemoDao demo = (DemoDao) applicationContext.getBean("demo");
demo.test();
}
}
5.在 resources 文件中创建一个 applicationContext.xml 的配置文件并添加以下配置。
<?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" >
<bean id="demo" class="cn.edu.demo.DemoDaoImpl" />
</beans>
6.项目创建完成后,在 pom.xml 文件中添加以下配置:
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.20.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
7.最后运行 Demo ,结果如图:
遇到的问题与解决
问题:
Exception in thread “main” java.lang.UnsupportedClassVersionError: org/springframework/context/ApplicationContext has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 60.0,即 JDK 与 Spring 版本不兼容导致出现错误。
注:Spring与JDK版本匹配
Spring Framework 6.0.x:JDK 17-21
Spring Framework 5.3.x:JDK 8-19
Spring Framework 4.3.x:JDK 6-8
解决:
本次使用 JDK 16.0.2 示例,所以在 pom.xml 文件中修改对应 Spring 版本即可。