《Java工程师必读手册》——Java经验之谈系列——那些年,我们见过的Java服务端“乱象”(2)

简介: 《Java工程师必读手册》——Java经验之谈系列——那些年,我们见过的Java服务端“乱象”(2)

接上篇:https://developer.aliyun.com/article/1228262?groupCode=java


二、 把业务代码写在Controller中

 

1. 现象描述

 

我们会经常会在Controller类中看到这样的代码:

 

image.png

 

编写人员给出的理由是:一个简单的接口函数,这么写也能满足需求,没有必要去封装成一个服务函数。

 

2. 一个特殊的案例

 

案例代码如下:

 

image.png

 

 

访问结果如下:

 

image.png 

 

为什么参数systemName(系统名称)没有被注入值?《Spring Documentation》给出的解释是:

 

| Note that actual processing of the @Value annotation is performed by a BeanPostProcessor.

 

BeanPostProcessor interfaces are scoped per-container. This is only relevant if you are using container hierarchies. If you define a BeanPostProcessor in one container, it will only do its work on the beans in that container. Beans that are defined in one container are not post-processed by a BeanPostProcessor in another container, even if both containers are part of the same hierarchy.

 

意思是说:

 

@Value是通过BeanPostProcessor来处理的,而WebApplicationContext和ApplicationContext是单独处理的,所以WebApplicationContext不能使用父容器的属性值。

 

所以,Controller不满足Service的需求,不要把业务代码写在Controller类中。

 

3. 服务端三层架构

 

SpringMVC服务端采用经典的三层架构,即表现层、业务层、持久层,分别采用@Controller、@Service、@Repository进行类注解。

 

image.png 

 

表现层(Presentation)

 

又称控制层(Controller),负责接收客户端请求,并向客户端响应结果,通常采用HTTP协议。

 

业务层(Business)

 

又称服务层(Service),负责业务相关逻辑处理,按照功能分为服务、作业等。

 

持久层(Persistence)

 

又称仓库层(Repository),负责数据的持久化,用于业务层访问缓存和数据库。

 

所以,把业务代码写入到Controller类中,是不符合SpringMVC服务端三层架构规范的。


接下篇:https://developer.aliyun.com/article/1228260?groupCode=java

相关文章
|
2月前
|
架构师 前端开发 Java
Java开发工程师的职业规划应该是什么样的?
Java开发工程师的职业规划涵盖多个阶段,包括初入行业(0-1年)、技能提升(1-3年)、技术专家(3-5年)及管理或专家路线选择(5年以上)。各阶段设定了明确的技能要求与职业目标,从掌握Java基础、常用框架到深入研究高级技术、微服务架构乃至担任管理职务或成为技术专家。通过持续学习与实践,结合个人兴趣,Java工程师可在技术或管理领域找到合适的发展方向,最终实现职业成功。
320 83
|
5天前
|
JSON Java 开发工具
Java服务端集成Google FCM推送的注意事项和实际经验
本文分享了作者在公司APP海外发布过程中,选择Google FCM进行消息推送的集成经验。文章详细解析了Java集成FCM推送的多种实现方式,包括HTTP请求和SDK集成,并指出了通知栏消息和透传消息的区别与应用场景。同时,作者还探讨了Firebase项目的创建、配置和服务端集成的注意事项,帮助读者解决文档混乱和选择困难的问题。
14 1
|
26天前
|
JSON Java 开发工具
Java服务端集成Google FCM推送的注意事项和实际经验
公司的app要上海外,涉及到推送功能,经过综合考虑,选择Google FCM进行消息推送。 查看一些集成博客和官方文档,看的似懂非懂,迷迷惑惑。本篇文章除了将我实际集成的经验分享出来,也会对看到的博客及其中产生的疑惑、注意事项一一评论。 从官方文档和众多博客中,你会发现Java集成FCM推送有多种实现方式,会让生产生文档很乱,不知作何选择的困惑。
62 0
|
2月前
|
设计模式 架构师 Java
Java开发工程师转架构师需要学习什么
Java开发工程师转型为架构师需掌握多项技能:精通Java及框架、数据库与分布式系统;熟悉设计模式与架构模式;积累项目经验;提升沟通与领导力;持续学习新技术;培养系统设计与抽象能力;了解中间件及开发工具;并注重个人特质与职业发展。具体路径应结合个人目标与实际情况制定。
62 18
|
2月前
|
人工智能 前端开发 Java
Java开发工程师转哪个行业比较好?
Java开发工程师转哪个行业比较好?
207 2
|
3月前
|
人工智能 自然语言处理 Java
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
文章介绍了Spring AI,这是Spring团队开发的新组件,旨在为Java开发者提供易于集成的人工智能API,包括机器学习、自然语言处理和图像识别等功能,并通过实际代码示例展示了如何快速集成和使用这些AI技术。
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
|
2月前
|
小程序 前端开发 JavaScript
Java开发工程师转小程序开发的前景如何?
Java开发工程师转小程序开发的前景如何?
43 0
|
4月前
|
Java
图解java工程师学习路线
图解java工程师学习路线
212 0
|
2天前
|
监控 安全 Java
在 Java 中使用线程池监控以及动态调整线程池时需要注意什么?
【10月更文挑战第22天】在进行线程池的监控和动态调整时,要综合考虑多方面的因素,谨慎操作,以确保线程池能够高效、稳定地运行,满足业务的需求。
67 38
|
3天前
|
Java 调度
[Java]线程生命周期与线程通信
本文详细探讨了线程生命周期与线程通信。文章首先分析了线程的五个基本状态及其转换过程,结合JDK1.8版本的特点进行了深入讲解。接着,通过多个实例介绍了线程通信的几种实现方式,包括使用`volatile`关键字、`Object`类的`wait()`和`notify()`方法、`CountDownLatch`、`ReentrantLock`结合`Condition`以及`LockSupport`等工具。全文旨在帮助读者理解线程管理的核心概念和技术细节。
14 1
[Java]线程生命周期与线程通信