首页 > 基础资料 博客日记
详细分析Java中的@Service注解
2024-10-02 09:00:07基础资料围观105次
Java资料网推荐详细分析Java中的@Service注解这篇文章给大家,欢迎收藏Java资料网享受知识的乐趣
1. 基本知识
@Service
是 Spring Framework 中的一个注解,用于标识一个类为服务层组件
服务层(Service Layer): 服务层是应用程序的一个层次结构,位于控制层(Controller Layer)和数据访问层(Data Access Layer)之间。服务层的主要责任是处理业务逻辑、协调数据访问和其他服务,并为控制器层提供数据。
对于其他层次的结构可参考如下文章:剖析Java中的Entity、service、serviceImpl、Mapper以及Controller层之间的关系(代码诠释)
作用:
- 标识为服务组件: 使用
@Service
注解标识的类表示它是服务层组件,即业务逻辑的实现类 - 依赖注入:
@Service
注解告诉 Spring 框架将这个类实例化为一个 Bean,并将其纳入 Spring IoC 容器中 - AOP 支持: 通过
@Service
注解,Spring 可以将切面(Aspect)应用于服务层组件,以实现例如事务管理、日志记录等方面的功能 - 基于组件扫描的自动装配: 在 Spring 应用程序中,通常使用组件扫描(Component Scanning)来自动发现标记有
@Service
注解的类,并将它们自动注册为 Spring Bean,从而简化了配置 - 提高代码可读性和可维护性: 使用
@Service
注解可以使代码更具有可读性,因为它清晰地标识了哪些类属于服务层,从而提高了代码的可维护性
2. Demo
一个简单的用户管理系统,其中包含用户的增加、删除和查询功能
2.1 传统形式
定义服务类: 直接定义一个服务类,实现业务逻辑
public class UserService {
public void addUser(User user) {
// 实现添加用户的逻辑
}
public void deleteUser(int userId) {
// 实现删除用户的逻辑
}
public User getUserById(int userId) {
// 实现根据用户ID查询用户的逻辑
return null;
}
}
使用服务: 在需要使用用户服务的地方,直接创建服务对象并调用其方法
public class UserController {
private UserService userService = new UserService();
// 通过用户服务添加用户
public void addUser(User user) {
userService.addUser(user);
}
// 通过用户服务删除用户
public void deleteUser(int userId) {
userService.deleteUser(userId);
}
// 通过用户服务查询用户
public User getUserById(int userId) {
return userService.getUserById(userId);
}
}
2.2 注解形式
定义服务层接口: 定义一个服务层接口 UserService,其中包含用户管理的各种操作方法
public interface UserService {
void addUser(User user);
void deleteUser(int userId);
User getUserById(int userId);
}
实现服务层接口:创建一个实现该接口的服务类 UserServiceImpl,并在其上添加 @Service 注解,以标识它为服务组件
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Override
public void addUser(User user) {
// 实现添加用户的逻辑
}
@Override
public void deleteUser(int userId) {
// 实现删除用户的逻辑
}
@Override
public User getUserById(int userId) {
// 实现根据用户ID查询用户的逻辑
return null;
}
}
使用服务: 在需要使用用户服务的地方,可以通过依赖注入的方式来引用该服务,并调用其方法
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class UserController {
@Autowired
private UserService userService;
// 通过用户服务添加用户
public void addUser(User user) {
userService.addUser(user);
}
// 通过用户服务删除用户
public void deleteUser(int userId) {
userService.deleteUser(userId);
}
// 通过用户服务查询用户
public User getUserById(int userId) {
return userService.getUserById(userId);
}
}
3. 总结
前后逻辑对比:
-
使用 @Service 注解的方式:
通过注解标识了服务类,使得 Spring 能够管理它的生命周期,并且进行依赖注入
代码更加清晰,使用了注解后可以清晰地看出哪些类是服务层组件,有利于代码的维护和阅读 -
传统方式:
需要手动创建服务对象,不利于解耦和依赖注入
缺乏了自动装配、AOP 等 Spring 提供的功能
文章来源:https://blog.csdn.net/weixin_47872288/article/details/138509834
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: