Spring框架中@component、@Service、@Controller和@Repository

在Spring中,@component、@service、@Controller和@Repository注释称为构造型注释。当启用组件扫描时,Spring会自动将这些bean导入到容器中,并将它们注入到依赖项中。

它们都用于将类标记为Spring管理的组件,不同之处:

  • @Controller :将类标记为Spring MVC控制器。通常在Spring MVC应用程序中使用,表示该类处理HTTP请求并返回视图。
  • @Component:  是一个通用注释,它将 Java 类标记为 bean。
  • @Service :是@Component的特化,并在服务层类上使用,因为它可以更好地指定意图。目前它不提供任何额外的行为。
  • @Repository:也是@Component注释的 特化  。除了将 DAO 导入 DI 容器之外,它还使未检查的异常(从 DAO 方法抛出)有资格转换为 Spring  DataAccessException。用于标注数据访问层的组件,表示该类用于数据库操作,并提供了一些额外的异常转换功能。

这些注解的实际功能和处理方式是相似的,它们都会被Spring容器注册为bean,并由Spring进行管理。

代码如下:

@Controller
public class UserMgmtController {

   //API handler methods
}

@Service
public class EmployeeServiceImpl inplements EmployeeService {
   
//... 
}

@Repository
public class EmployeeDAOImpl implements EmployeeDAO {
    ...
}

调用顺序:

  • @Controller代表Spring MVC控制器属于MVC模式的一种实现控制器,它接受前端界面的用户输入输出,在控制器中会与后端业务服务层@Service交互,将委托@Service处理业务逻辑和算法。
  • 基础设施等技术应用方面的组件通过@Component调用交互。
  • @Service和@Component进行业务计算以后,如果需要数据库数据,通过@Repository 仓储实现。
  • @Repository中会通过jdcbTemp/jdbcClient或SpringData/JPA技术真正操作数据库

以上是普通三层架构:表现层、服务层和仓储层,更复杂的多层参考clean架构DDD 实现。