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

这次看一下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)

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容