@Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。
@Component有几个衍生注解,按照三处架构分层
因此,当你的一个类被@Component
所注解,那么就意味着同样可以用@Repository
, @Service
, @Controller
来替代它,同时这些注解会具备有更多的功能,而且功能各异。
用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller对象,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。@Controller只是定义了一个控制器类,而使用@RequestMapping注解的方法才是处理请求的处理器。
它可以注解类也可以注解方法,注解类时标注请求的路径,标注方法时表示将特定的URL映射到指定的方法。
应用于业务层,用于标注业务层组件,表示定义一个bean,自动根据bean的类名实例化一个首写字母为小写的bean。
用于标注数据访问组件,即DAO组件,表示将Dao类声明为bean
@Repository 只能标注在 DAO 类,因为该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。
@Component
, @Service
, @Controller
, @Repository
是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理。虽然你可以全部使用@Component
注解,但使用其他注解,则你的类更适合于通过工具进行处理或与其他方面相关联。
@Component
是通用注解,其他三个注解是这个注解的衍生注解,并且具有了特定的功能。@Controller
层是spring-mvc的注解,用于标注控制层组件,并查看是否处理请求转发,重定向。@Service
层是业务逻辑层注解,这个注解只是标注该类处于业务逻辑层。@Repository
注解在持久层中,标注 DAO 类,具有将数据库操作抛出的数据访问异常自动转换(封装)为spring的持久层异常的功能。用这些注解对应用进行分层之后,就能将请求处理,义务逻辑处理,数据库操作处理分离出来,为代码解耦,也方便了以后项目的维护和开发。
参考