Spring典型注解@Controller、@Service、@

作者: Real_man | 来源:发表于2018-11-12 08:46 被阅读1次

    这次看一下Spring典型的注解,@Controller,@Service,@Component,@Repository。这四个注解在我们开发中非常的常见,用于定义不同类型的beans。

    代码

    在spring源码包中,这四个注解的定义

    // Component注解定义
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Component {
        String value() default "";
    
    }
    
    // Repository注解定义
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component
    public @interface Repository {
        String value() default "";
    
    }
    
    // Service注解定义
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component
    public @interface Service {
        String value() default "";
    
    }
    
    // Controller注解定义
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component
    public @interface Controller {
        String value() default "";
    
    }
    

    可以看到,四个注解都可以说成事Component级别的注解,Spring框架自动扫描的注解也是检测是否有Component注解标记。

    @Component

    这个注解主要用于标记一个类作为spring的组件,spring扫描的时候扫描的是这个注解。
    标记@Component的类在spring的beanName中是类首字母小写,其余字母都一样。

    因为其它几个常用典型注解也是Component,所以他们与Component有相同的beanName命名方式。

    @Repository

    这个注解用来标识这个类是用来直接访问数据库的,这个注解还有一个特点是“自动转换(automatic translation)”。就是在标记 @Repositor发生异常的时候,会有一个处理器来处理异常,而不需要手动的再加try-catch块。

    为了启用自动转换异常的特性,我们需要声明一个PersistenceExceptionTranslationPostProcessor的bean。

    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
        return new PersistenceExceptionTranslationPostProcessor();
    }
    

    或者在XML文件中:

    <bean class=
      "org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
    
    

    @Service

    应用的业务逻辑通常在service层实现,因为我们一般使用@Service注解标记这个类属于业务逻辑层。

    @Service
    public class SyncPreAuthInfoService{
        //....
    }
    

    @Controller

    这个注解主要告诉Spring这个类作为控制器,可以看做标记为暴露给前端的入口。

    @Controller
    public class PayRecordsStatisticsController{
        //...
    }
    

    最后

    项目小的时候对这些注解没有特别的区分,但项目如果变得越来越大,那么就要划分的细致一些有一定的规则才方便大家的维护。有点像衣服,虽然都是衣服,但是有的是要穿出去开party的,有的是穿出去运动的,有的是休闲的。功能一样,但是用途不是很相同。

    • @Component spring基础的注解,被spring管理的组件或bean
    • @Repository 用于持久层,数据库访问层
    • @Service 用于服务层,处理业务逻辑
    • @Controller 用于呈现层,(spring-mvc)

    参考

    相关文章

      网友评论

        本文标题:Spring典型注解@Controller、@Service、@

        本文链接:https://www.haomeiwen.com/subject/fphqfqtx.html