@Component,@Repository和@Service注释可以在Spring中互换使用吗,或者除了用作注释设备之外,它们还提供任何特定功能吗?
@Component
@Repository
@Service注
换句话说,如果我有一个Service类,并且将注释从更改@Service为@Component,它的行为是否仍将相同?
@Service
还是注释也会影响类的行为和功能?
从Spring文档:
在Spring 2.0和更高版本中,@Repository注释是满足存储库角色或构造型(也称为数据访问对象或DAO)的任何类的标记。该标记的用途包括自动翻译例外。
Spring 2.5中引入了进一步典型化注解:@Component, @Service,和@Controller。@Component是任何Spring托管组件的通用构造型。@Repository,@Service和@Controller分别是@Component针对特定用例的专业化,例如分别在持久性,服务和表示层。
@Component, @Service
@Controller
@Repository,@Service和@Controller
因此,你可以用你的注解组件类@Component,但如果用注解它们@Repository,@Service或者@Controller ,你的类能更好地适合于通过工具处理,或与切面进行关联。例如,这些构造型注释成为切入点的理想目标。
@Repository,@Service
因此,如果你在使用@Component还是@Service在服务层之间进行选择,@Service显然是更好的选择。同样,如上所述,@Repository在持久层中已经支持作为自动异常转换的标记。
┌────────────┬─────────────────────────────────────────────────────┐ │ Annotation │ Meaning │ ├────────────┼─────────────────────────────────────────────────────┤ │ @Component │ generic stereotype for any Spring-managed component │ │ @Repository│ stereotype for persistence layer │ │ @Service │ stereotype for service layer │ │ @Controller│ stereotype for presentation layer (spring-mvc) │ └────────────┴─────────────────────────────────────────────────────┘