Spring Boot 分层架构(spring分层架构)

java

复制

下载

// 主应用入口 - 启用自动配置和组件扫描

@SpringBootApplication

public class EcommerceApplication {

public static void main(String[] args) {

SpringApplication.run(EcommerceApplication.class, args);

}

}

// 领域模型 - 核心业务对象

@Entity

@Data

@NoArgsConstructor

public class Product {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

private String name;

private String description;

private BigDecimal price;

private Integer stock;

}

// 数据访问层 - 数据库操作

@Repository

public interface ProductRepository extends JpaRepository<Product, Long> {

List<Product> findByPriceBetween(BigDecimal min, BigDecimal max);

}

// 服务层 - 业务逻辑

@Service

@Transactional

public class ProductService {

private final ProductRepository productRepository;

@Autowired

public ProductService(ProductRepository productRepository) {

this.productRepository = GAME.HUoCheNGrM.Cn/2025-08-10-00-19-184bo.html

productRepository;

}

public Product createProduct(Product product) {

// 业务验证

if (product.getPrice().compareTo(BigDecimal.ZERO) <= 0) {

throw new GAME.HUoCheNGrM.Cn/2025-08-10-00-18-418gw.html

IllegalArgumentException("价格必须大于0");

}

return productRepository.save(product);

}

public List<Product> getProductsInPriceRange(BigDecimal min, BigDecimal max) {

return productRepository.findByPriceBetween(min, max);

}

}

// 控制器层 - REST API

@RestController

@RequestMapping("/api/products")

public class GAME.HUoCheNGrM.Cn/2025-08-10-00-18-45fm6.html

ProductController {

private final ProductService productService;

@Autowired

public ProductController(ProductService productService) {

this.productService = productService;

}

@PostMapping

@ResponseStatus(HttpStatus.CREATED)

public Product createProduct(@RequestBody Product product) {

return productService.createProduct(GAME.HUoCheNGrM.Cn/2025-08-10-00-18-2738e.html

);

}

@GetMapping

public List<Product> getProducts(

@RequestParam(required = false) BigDecimal minPrice,

@RequestParam(required = false) BigDecimal maxPrice) {

return productService.getProductsInPriceRange(

minPrice != null ? minPrice : BigDecimal.ZERO,

maxPrice != null ? maxPrice : BigDecimal.valueOf(10000)

);

}

}

// 全局异常处理

@ControllerAdvice

public class GlobalExceptionHandler {

@ExceptionHandler GAME.HUoCheNGrM.Cn/2025-08-10-00-14-29s81.html

(IllegalArgumentException.class)

public ResponseEntity<String> handleIllegalArgument(IllegalArgumentException ex) {

return ResponseEntity.badRequest().body(ex.getMessage());

}

}

架构说明:

  1. 分层结构:清晰分离领域模型(Entity)、数据访问(Repository)、业务逻辑(Service)、API接口(Controller)
  2. 依赖注入:通过构造器注入实现松耦合
  3. 事务管理:@Transactional注解声明式事务
  4. RESTful设计:符合HTTP语义的资源操作
  5. 全局异常处理:统一错误响应格式
  6. JPA抽象:Spring Data简化数据库操作

特别声明:[Spring Boot 分层架构(spring分层架构)] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

米雪首次上央视春晚!她71岁仍未婚单身,财产将来给外甥(米雪出席活动)

2026年除夕夜, 米雪七十一岁了, 她上了春晚舞台, 她和许娣表演, 她和王劲松搭档, 她和常远艾伦, 一起跳着歌舞, 名字叫马上有奇迹,她的姿态好看, 她很优雅灵动, 很多人全傻了, 大家都没想到, 她…

米雪首次上央视春晚!她71岁仍未婚单身,财产将来给外甥(米雪出席活动)

好在玉溪365丨2026年2月26日(玉溪好在歌曲)

以天为幕,以地为琴,奏响生活乐章。 心归处,是玉溪,是山水,是自己。 声明:转载请注明出处 海报摄影:江蕊仙 海报制作:黄春龙 何蕾编辑:武思琪 初审:王德有 审核:罗 雪…

好在玉溪365丨2026年2月26日(玉溪好在歌曲)

润达机械取得组合式耐磨衬板专利,能提高衬板在磨损环境下的耐久性(润达机械制造公司怎么样)

国家知识产权局信息显示,苏州市润达机械制造有限公司取得一项名为“一种组合式耐磨衬板”的专利,授权公告号CN223948754U,申请日期为2025年3月。企业注册资本1000万人民币。 声明:市场有风险,投资…

润达机械取得组合式耐磨衬板专利,能提高衬板在磨损环境下的耐久性(润达机械制造公司怎么样)

银幕封神,人间隐居:葛丽泰·嘉宝的极致人生

18岁时,嘉宝在电影《戈斯塔柏林的故事》中担任女主角🎭️,这部影片在欧洲大获成功,嘉宝独特的气质也令她一夜成名,备受瞩目。直到导演蒙他·贝尔发现了她,嘉宝才迎来了她在好莱坞的第一部默片《激流》(1926年)。19…

银幕封神,人间隐居:葛丽泰·嘉宝的极致人生

徐盛源夫妇在 NIC 迎来喜讯(徐盛宇简介)

NIC医院作为国际知名的生殖医学机构,始终专注于辅助生殖技术的研发与应用,汇聚全球优质医疗资源,拥有先进的医疗设备、完善的服务体系以及以玛祖医生为首的顶尖专家团队。 正是这份无可替代的专业实力与良好口碑,…

徐盛源夫妇在 NIC 迎来喜讯(徐盛宇简介)