1. 定义
- @Component:带该注释的类是一个“组件(Component)”。当使用基于注释的配置和类路径扫描时,这些类被认为是自动检测的候选类。
- @Service:表示一个带注释的类是一个“服务(Service)”,最初由域驱动设计(Evans,2003)定义为“一个作为接口提供的操作,它独立于模型之外,没有封装的状态。”
- @Controller:表示一个带注释的类是一个“控制器(Controller)”(如一个web控制器)。
- @Repository:表示一个带注释的类是一个“存储库(Repository)”,最初由领域驱动设计(Evans,2003)定义为“一种封装存储、检索和搜索行为的机制,它模拟一组对象”。
注意:在 Spring 源码中,除了 Component 外的三个注解都在开始部分引入了 @Component 注解,本质上这四个注解的源码内容没有任何区别,因此后面的这三个注解与 Component 的作用是一样的。之所以要额外的引出这三个注解,是为了更好的与 Web 开发中常用的三层结构相对应。
2. 关系
-
@Component是基础注解,表示一个 JavaBean 可以被注入到 Spring 容器中。
-
@Controller 用在表现层,对来自前端的请求进行转发处理与重定向。
-
@Repository 用在持久层,标注 DAO 类,表示这个类可以对数据库进行数据的读取或者写入。
-
@Service 用在业务层,用来处理业务逻辑。
注意:传统的JavaEE三层架构分别是:表现层、业务层和持久层。