Spring
框架
Spring
使创建
Java
企业应用程序变得更加容易。并且提供了在企业环境中如何高效的使用
Java
语言所需的一切,支持Groovy
和
Kotlin
作为
JVM
上的替代语言,并且可以根据应用程序的需要,进行灵活地创建多种架构体系
spring5
是
2017
年
9
月发布通用版本,是自
2013
年
12
月以来第一个主要的
Spring
版本,兼容
JavaEE8
(
Servlet4
、
Bean Validation2.0
)和
JDK9
,集成了反应式编程
Rx
模型(完全异步和非阻塞的)
支持
Spring6
开始,已经升级到
Jakarta EE 9
级别(例如
Servlet 5.0+
、
JPA 3.0+
),基于
Jakarta
命名空间
而不是传统的
javax
包。要求使用
Java 17
或更高版本,由于
Jakarta EE 9
是最低的,
Jakarta EE 10
已经得到支持,Spring
准备为
Jakarta EE API
的进一步发展提供开箱即用的支持。
Spring Framework 6.0与 Tomcat 10.1
、
Jetty 11
和
Undertow 2.3
作为
web
服务器完全兼容,也与
Hibernate ORM 6.1
完全兼容
开发中出现的问题
问题描述:编码依赖问题。在程序中要分层,且层与层相互调用就会存在依赖
public class StudentAction {
/* 采用new的方式创建业务逻辑层,为硬编码的方式。这种方式缺乏灵活性,后期维护则需要编译
class文件之后覆盖原来的class文件,这种方式也体现不出面向接口编程的好处
*/
private StudentService studentService = new StudentServiceimpl();
private Student student;
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public String save() {
studentService.save(student);
return "success";
}
}
同样在业务逻辑层调用数据访问层中
,
也会出现如下问题:
public class StudentServiceimpl implements StudentService {
// 如果底层切换的数据库,则数据访问层也要切换, 但是目前new 之后不方便修改
private StudentDao studentDao=new StudentDaoImpl();
public void save(Student student) {
studentDao.save(student);
}
}
以上代码是有问题的,即在控制层中依赖了具体的业务逻辑层,在业务逻辑层中依赖了具体的数据访问层,这样就和具体的实现类耦合在了一起,也没有发挥面向接口编程的作用。如果要更换(如要换成 StudentOracleImpl),就需要修改源代码,但是项目很多模块都需要同时修改,这样会非常麻烦;而且修改完毕之后还要编译成class
文件,覆盖原来的文件,不利于项目的后期维护,而且项目与项目之间
的依赖隐藏在了代码中,也不适合全局把握整个项目,因此维护性和二次开发比较麻烦。