@Controller,@Component,@Service,@Repository 区别与联系

@Component

@Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。
@Component有几个衍生注解,按照三处架构分层

  • dao[ @Repository ]
  • service[ @service ]
  • controller[ @Controller]

因此,当你的一个类被@Component所注解,那么就意味着同样可以用@Repository, @Service, @Controller来替代它,同时这些注解会具备有更多的功能,而且功能各异。

@Controller控制层

用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller对象,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。@Controller只是定义了一个控制器类,而使用@RequestMapping注解的方法才是处理请求的处理器。

@RequestMapping

它可以注解类也可以注解方法,注解类时标注请求的路径,标注方法时表示将特定的URL映射到指定的方法。

@Service业务逻辑层

应用于业务层,用于标注业务层组件,表示定义一个bean,自动根据bean的类名实例化一个首写字母为小写的bean。

@Repository持久层

用于标注数据访问组件,即DAO组件,表示将Dao类声明为bean
@Repository 只能标注在 DAO 类,因为该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。
不使用@Repository

总结

@Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理。虽然你可以全部使用@Component注解,但使用其他注解,则你的类更适合于通过工具进行处理或与其他方面相关联。

  • @Component是通用注解,其他三个注解是这个注解的衍生注解,并且具有了特定的功能。
  • @Controller层是spring-mvc的注解,用于标注控制层组件,并查看是否处理请求转发,重定向。
  • @Service层是业务逻辑层注解,这个注解只是标注该类处于业务逻辑层。
  • @Repository注解在持久层中,标注 DAO 类,具有将数据库操作抛出的数据访问异常自动转换(封装)为spring的持久层异常的功能。

用这些注解对应用进行分层之后,就能将请求处理,义务逻辑处理,数据库操作处理分离出来,为代码解耦,也方便了以后项目的维护和开发。
参考
@Component, @Repository, @Service的区别
https://blog.csdn.net/weixin_38022166/article/details/117249253