死磕-Spring Boot(二)

简介: 死磕-Spring Boot(二)

一、Java EE的缺点

java EE的诞生,结束了Web开发的技术无序状态,让程序员,架构师可以用同一种思维去思考如何架构和开发应用。

但是java EE也有其局限性:

①、过于复杂:因为Java EE针对的是复杂的分布式企业应用,然而现实情况是大部分应用都比较简单,而且复杂的架构带来了复杂的开发方式和部署方式。

②、追求分布式:大部分应用并非都是Java EE假定的分布式系统,像EJB,JMS,JWS等技术实现门槛又高又容易出错。Spring曾经就反对这种分布式架构,所以只提供了容器管理,大型应用采用分布式架构不可避免,Spring提供了其他的技术支持,比如支持RESTFul架构。

③、不能及时与流行开源技术结合,比如消息处理,除了有标准的JMS支持。

但是性能更好的RabbitMQ和Kafka。JavaEE没有与之更好的相应的标准,反而是Spring,具有统一的实现消息处理模式,无论用的是JMS,RabbitMQ,还是Kafka,都能快速上手。

④、Java EE应用服务器通常都是由商业公司提供,价格不菲,少有公司采用,而且自学部署应用对初学者是有一定的门槛。

二、你真的理解Spring吗?

①、Spring是为了解决应用复杂性而产生的框架。

②、它吸取了Java EE容器管理的优点,提供了Ioc容器来管理Bean。

③、通过AOP方式来增强Bean的功能。

④、它并没有像Java EE那样详细规定容器提供的是何种服务和容器里运行的具体组件的类型。

⑤、Spring只提供了两种机制,控制反转(Ioc)和面向切面(AOP),来提供任意的服务和增强Bean的任意特性,使得Spring本身可以容易掌握,并且可以通过Bean管理来控制无限扩展功能。

三、Spring IOC容器和AOP

Spring框架如同Java EE一样,包含了企业应用需要的各种技术,Spring本身提供了两个最核心的技术-IOC容器和AOP增强,如下图所示:

IOC:Spring Container负责管理你的任意的对象,并结合你对对象的描述进行初始化和加强。

例如:

①、对于用一个注解@Controller声明的对象,Spring会认为这个对象是个Web Controller。

②、如果这个对象里的方法有@RequestMapping注解,则会将客户端发起的HTTP请求转化成Java方法调用。

③、在上面的例子中,Spring容器在初始化HelloWorldController实例后,对于客户端发起的/sayHello.html请求,会执行say方法,并自动将请求参数按照say方法声明的名称一一对应上。

④、Spring通常提供一些

@Controller,@Service,@Component,@Configuration注解,只有使用这些注解的类才会引起Spring容器的注意,并根据注解含义来管理和增强对象。

⑤、Spring可以管理和增强任意对象,如常见的@Service注解对象,通常都是用来处理业务逻辑,Spring容器往往会增强这类对象的事务控制能力。

⑥、容器管理还可以被管理的Bean提供其他被管理和被增强的Bean,如一个已经被@Service注解的UserService类,在HelloWorldController类中,使用@Autowired自动注入这个实例。

AOP:上面提到的对象增强离不开AOP技术。

AOP是指面向切面编程,通过预编译方式或者运行时刻对目标对象动态添加功能,AOP分离了企业应用的业务逻辑和系统级服务。

①、比如:事务服务,还有应用系统的审计,安全访问等功能代码

②、比如:实现用户访问控制,可以对每个Controller的方法使用一个自定义的注解@Function,用Spring AOP向Controller每个方法动态的添加用户权限校验功能,代码如下:

上面的注解@Function是自定义的注解,接受一个字符串,表示Controller方法对象的业务功能,用户能否访问到user.add这个功能,可以在数据库中配置。

③、使用AOP对所有的Controller进行增强,代码如下:

四、Spring的缺点

①、使用门槛高,要入门Spring需要较长的时间。

②、对过时的技术兼容,导致使用复杂度升高。

③、XML配置已经不再是流行的系统配置方式。

④、集成第三方工具的时候,程序员还需要考虑工具之间的兼容性。

⑤、系统启动的时候,不具备热部署功能,完全依赖虚拟机或者Web服务器的热部署。

五、Spring Boot的诞生

对于Spring的缺点,尤其是上手难,技术使用不统一的两个缺点,Spring的开发者们推出了Spring Boot的框架。Spring Boot能够快速开发Web系统,也能容易地架构大的分布式系统。


今天先到这了,明天见~~

相关文章
|
1月前
|
监控 Java 数据库连接
《深入理解Spring》事务管理——数据一致性的守护者
Spring事务管理确保数据一致性,支持声明式与编程式两种方式。通过@Transactional注解简化配置,提供传播行为、隔离级别、回滚规则等灵活控制,结合ACID特性保障业务逻辑可靠执行。
|
5月前
|
人工智能 移动开发 JavaScript
AI + 低代码技术揭秘(一):概述
VTJ.PRO 是一个基于 AI 的 Vue3 低代码开发平台,支持 Vue 单文件组件(SFC)与领域特定语言(DSL)之间的双向转换。它构建于 monorepo 架构之上,提供同步版本控制和全面的软件包生态系统,涵盖可视化设计、代码生成及多平台部署功能,同时兼容现有 Vue 3 工作流。平台特点包括双向代码流、AI 集成、Vue 3 基础支持、多平台适配以及低学习门槛等。通过模块化架构与智能工具,VTJ 加速开发流程并保持灵活性,适用于 Web、移动及跨平台项目。当前版本为 0.12.40,源码托管于 Gitee。
210 8
AI + 低代码技术揭秘(一):概述
|
11月前
|
人工智能 自然语言处理 算法
通义灵码,让梦想照进现实更快一点
“大模型的出现颠覆了我们学习、研究和生活的方式,对于现在的年轻人来说,掌握 AI 是未来生存、工作的必要技能。”
|
11月前
|
机器学习/深度学习 人工智能 PyTorch
使用PyTorch实现GPT-2直接偏好优化训练:DPO方法改进及其与监督微调的效果对比
本文将系统阐述DPO的工作原理、实现机制,以及其与传统RLHF和SFT方法的本质区别。
865 22
使用PyTorch实现GPT-2直接偏好优化训练:DPO方法改进及其与监督微调的效果对比
|
人工智能 Kubernetes Cloud Native
利用通义灵码实现我的第一次开源贡献
本文将分享作者的开源之旅。
|
XML Java 测试技术
什么是 JavaConfig?
什么是 JavaConfig?
355 7
|
API 语音技术 开发者
用python实现文字转语音的5个较好用的模块
这篇文章介绍了五个Python模块:gtts、pyttsx3、baidu-aip、pywin32和speech,它们能够实现文本到语音的转换功能。
1172 1
|
Java 应用服务中间件 开发者
Spring Boot 2.x新特性有哪些?
【7月更文挑战第16天】Spring Boot 2.x新特性有哪些?
344 1
|
存储 开发工具 Android开发
Android系统 权限组管理和兼容性
Android系统 权限组管理和兼容性
431 0