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 |
调用顺序:
- @Controller代表Spring MVC控制器属于MVC模式的一种实现控制器,它接受前端界面的用户输入输出,在控制器中会与后端业务服务层@Service交互,将委托@Service处理业务逻辑和算法。
- 基础设施等技术应用方面的组件通过@Component调用交互。
- @Service和@Component进行业务计算以后,如果需要数据库数据,通过@Repository 仓储实现。
- @Repository中会通过jdcbTemp/jdbcClient或SpringData/JPA技术真正操作数据库
以上是普通三层架构:表现层、服务层和仓储层,更复杂的多层参考clean架构 等 DDD 实现。