可以@Component
, @Repository
和 @Service
注释在 Spring 中可以互换使用,还是除了充当注释设备之外,它们还提供任何特定功能吗?
换句话说,如果我有一个 Service 类并且我将注解从 @Service
更改为 @Component
,它的行为方式是否仍然相同?
或者注解也会影响类的行为和功能?
最佳答案
来自 Spring Documentation :
The
@Repository
annotation is a marker for any class that fulfils the role or stereotype of a repository (also known as Data Access Object or DAO). Among the uses of this marker is the automatic translation of exceptions, as described in Exception Translation.Spring provides further stereotype annotations:
@Component
,@Service
, and@Controller
.@Component
is a generic stereotype for any Spring-managed component.@Repository
,@Service
, and@Controller
are specializations of@Component
for more specific use cases (in the persistence, service, and presentation layers, respectively). Therefore, you can annotate your component classes with@Component
, but, by annotating them with@Repository
,@Service
, or@Controller
instead, your classes are more properly suited for processing by tools or associating with aspects.For example, these stereotype annotations make ideal targets for pointcuts.
@Repository
,@Service
, and@Controller
can also carry additional semantics in future releases of the Spring Framework. Thus, if you are choosing between using@Component
or@Service
for your service layer,@Service
is clearly the better choice. Similarly, as stated earlier,@Repository
is already supported as a marker for automatic exception translation in your persistence layer.
注释 | 意义 |
---|---|
@Component |
任何 Spring 管理组件的通用构造型 |
@Repository |
持久层的原型(prototype) |
@Service |
服务层的原型(prototype) |
@Controller |
表示层的原型(prototype)(spring-mvc) |
关于java - Spring中的@Component、@Repository和@Service注解有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6827752/