当前位置: 首页 > wzjs >正文

有经验的盐城网站开发有口碑的中山网站建设

有经验的盐城网站开发,有口碑的中山网站建设,游戏网站怎么制作,英文seo是什么意思在 Spring Boot 中,Service 层是业务逻辑的核心,负责协调数据访问层(Repository 或 Mapper)和控制器层(Controller),处理业务规则、事务管理以及数据转换。以下是 Service 层的详细说明、常用注…

在 Spring Boot 中,Service 层是业务逻辑的核心,负责协调数据访问层(Repository 或 Mapper)和控制器层(Controller),处理业务规则、事务管理以及数据转换。以下是 Service 层的详细说明、常用注解及依赖注入方式:


1. Service 层的核心作用

  1. 业务逻辑处理:封装复杂的业务规则(如订单创建、用户权限校验)。
  2. 事务管理:通过 @Transactional 注解确保数据库操作的原子性。
  3. 异常处理:统一捕获并处理数据访问层的异常(如 DataAccessException)。
  4. DTO 转换:将实体类(Entity)转换为数据传输对象(DTO),避免暴露敏感字段。

2. Service 层的常用注解

(1) @Service
  • 作用
    将类标记为 Spring 管理的业务逻辑组件,自动注册为 Bean,供其他层(如 Controller)注入使用。
  • 位置:类声明上方。
  • 示例
    @Service
    public class UserService {// 业务方法...
    }
    
(2) @Transactional
  • 作用
    声明方法或类需要 事务管理。如果方法抛出异常(默认 RuntimeException),事务将回滚。
  • 关键参数
    参数作用示例
    rollbackFor指定触发回滚的异常类型@Transactional(rollbackFor = Exception.class)
    propagation事务传播行为(如 REQUIREDREQUIRES_NEW@Transactional(propagation = Propagation.REQUIRED)
    isolation事务隔离级别(如 READ_COMMITTED@Transactional(isolation = Isolation.READ_COMMITTED)
  • 示例
    @Service
    public class OrderService {@Transactional  // 方法级事务public void createOrder(Order order) {// 业务逻辑...}
    }
    

3. 如何将 Repository/Mapper 注入到 Service?

在 Spring Boot 中,通过 依赖注入(Dependency Injection, DI) 将 Repository 或 Mapper 注入到 Service。以下是两种常用方式:

(1) 构造器注入(推荐)
  • 原理:通过构造函数传递依赖,Spring 自动注入 Bean。
  • 优点
    • 明确依赖关系,避免 NullPointerException
    • 支持不可变(final)字段,线程安全。
  • 示例
    @Service
    public class UserService {private final UserRepository userRepository;// 构造器注入(Spring 4.3+ 可省略 @Autowired)public UserService(UserRepository userRepository) {this.userRepository = userRepository;}public User getUserById(Long id) {return userRepository.findById(id).orElse(null);}
    }
    
(2) @Autowired 注解注入
  • 原理:通过字段或 Setter 方法自动注入依赖。
  • 缺点
    • 字段注入可能导致循环依赖问题。
    • Setter 注入不够直观。
  • 示例
    @Service
    public class UserService {@Autowired  // 字段注入(不推荐)private UserRepository userRepository;// 或 Setter 注入@Autowiredpublic void setUserRepository(UserRepository userRepository) {this.userRepository = userRepository;}
    }
    

4. 完整示例:Service 层工作流程

(1) 实体类(Model)
@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String email;// Getter & Setter
}
(2) Repository 接口(JPA)
public interface UserRepository extends JpaRepository<User, Long> {User findByEmail(String email);
}
(3) Service 类
@Service
public class UserService {private final UserRepository userRepository;public UserService(UserRepository userRepository) {this.userRepository = userRepository;}@Transactionalpublic User createUser(String name, String email) {User user = new User();user.setName(name);user.setEmail(email);return userRepository.save(user);  // 调用 Repository 保存数据}public User getUserByEmail(String email) {return userRepository.findByEmail(email);}
}
(4) Controller 类
@RestController
@RequestMapping("/api/users")
public class UserController {private final UserService userService;public UserController(UserService userService) {this.userService = userService;}@PostMappingpublic User createUser(@RequestBody UserRequest request) {return userService.createUser(request.getName(), request.getEmail());}@GetMapping("/{email}")public User getUser(@PathVariable String email) {return userService.getUserByEmail(email);}
}

5. 常见问题解答

(1) 为什么推荐构造器注入?
  • 不可变性:字段标记为 final,避免中途修改。
  • 依赖明确:一眼看出 Service 需要哪些依赖。
  • 避免循环依赖:构造器注入在启动时就能发现循环依赖问题。
(2) @Transactional 应该加在 Service 还是 Repository?
  • 推荐加在 Service 层
    Service 方法可能涉及多个 Repository 操作,需统一事务管理(如用户注册时同时操作 User 表和 Account 表)。
(3) 如何处理多个数据源或 Mapper(MyBatis)?
  • MyBatis 的 Mapper 注入
    使用 @MapperScan 扫描 Mapper 接口,然后直接注入:
    @Service
    public class OrderService {private final OrderMapper orderMapper;public OrderService(OrderMapper orderMapper) {this.orderMapper = orderMapper;}
    }
    

总结

组件职责核心注解依赖注入方式
Service处理业务逻辑、事务管理@Service, @Transactional构造器注入(推荐)
Repository数据访问操作(JPA)无(继承 JpaRepository自动注入到 Service
Mapper数据访问操作(MyBatis)@Mapper(MyBatis)自动注入到 Service

通过合理使用 @Service@Transactional,结合构造器注入,可以构建清晰、可维护的 Service 层,高效管理业务逻辑和数据库事务。

http://www.dtcms.com/wzjs/606278.html

相关文章:

  • 乐平市建设局网站计算机网络 网站开发与设计
  • 网站点击量怎么查网络诚信 网站应怎么做
  • 网站关键词设置电商店铺装修
  • 网站建设需要些什么设备免费seo网站推荐一下软件
  • 菏泽做网站的网站开发+职位描述
  • 做服装行业网站怎么每天更新内容网站开发工具选用原则
  • 集约化网站建设项目组网站建设方案书
  • 怎么找网站做推广开发网站通过第三方微信认证登录开发费用
  • phpcms网站title二维码短链接生成器
  • 自适应网站平台网站首页做30个关键词
  • 没有内容的网站应该怎么做ps做的网站
  • 外贸如何建立网站微信开发者平台怎么注销
  • 诸城网站设计网站开发项目报价单
  • 网站系统平台建设贵州省住房与城乡建设厅网站
  • 网站 ipc 备案学前端有必要找培训机构吗
  • 学院网站建设及维护实施办法php彩票网站建设教程
  • 什么叫网站优化寻找杭州做网站软件人
  • 手机浏览器网站开发查网站开发者
  • 成都旅游网站建设中原区建设局网站
  • 做网站的图片尺寸怎么设定国外做饮料视频网站
  • 网站 百度 关键字优化精品国内网站建设
  • 提供网站制作公司wordpress图片描述
  • 黑龙江网站建设黄页网站大全免费网在线
  • wordpress文章文件夹秦皇岛seo
  • 如何让网站做成移动版投标网站怎么做
  • 878网站正在建设中wordpress批量alt代码
  • 网站修改 iis6应用程序池文登市住房和城乡建设局网站
  • 榆社县济南网站建设公司 大学学网站建设工作室
  • 成品免费ppt网站湖南长沙招聘信息最新招聘2022
  • 免费可以做旅游海报 的网站网络与智能媒体设计 干什么?