在Spring中不正确地使用了刻板印象,他们在幕后到底做了什么

在Spring中不正确地使用了刻板印象,他们在幕后到底做了什么,spring,spring-annotations,Spring,Spring Annotations,Spring的@Component的特殊变体是否会被不当使用?i、 e.如果我调用我的服务类@Repository,而不是@service,或者相反。 是否有任何防止此类不当使用的措施,或者只是建议在没有Spring强制执行的情况下,根据上下文正确使用 有人能告诉我每个原型到底发生了什么吗?我阅读了javadocs,但不完全了解每个Spring原型提供了什么特殊的功能集是的,你可以用@Repository或@Service注释任何类,它们的行为都是一样的,但文档中有一点很有趣: 因此,您可以使用

Spring的@Component的特殊变体是否会被不当使用?i、 e.如果我调用我的服务类@Repository,而不是@service,或者相反。 是否有任何防止此类不当使用的措施,或者只是建议在没有Spring强制执行的情况下,根据上下文正确使用


有人能告诉我每个原型到底发生了什么吗?我阅读了javadocs,但不完全了解每个Spring原型提供了什么特殊的功能集

是的,你可以用
@Repository
@Service
注释任何类,它们的行为都是一样的,但文档中有一点很有趣:

因此,您可以使用@component注释组件类,但通过使用@Repository、@Service或@Controller注释它们,您的类更适合通过工具处理或与方面关联。例如,这些原型注释是切入点的理想目标

因此,如果您选择使用@Component还是@Service来 您的服务层,@service显然是更好的选择。同样地, 如上所述,@Repository已经被支持作为 在持久层中自动异常转换

在这里,您可以看到在第一段中讨论的两个重要问题切入点的理想目标,第二段是自动异常转换

显然,如果您知道AOP,第一个是可以理解的,第二个是这些注释的一个优点。让我们看看文档自动异常翻译的含义:

常见的数据访问异常。Spring可以包装您选择的O/R映射工具中的异常,将它们从专有(可能已检查)异常转换为公共运行时DataAccessException层次结构。这允许您处理大多数持久性异常,这些异常是不可恢复的,仅在适当的层中处理,而无需烦人的模板捕获/抛出和异常声明。您仍然可以在任何需要的地方捕获和处理异常。请记住,JDBC异常(包括特定于DB的方言)也会转换为相同的层次结构,这意味着您可以在一致的编程模型中使用JDBC执行某些操作

所以基本上,它们是相同的,但当你深入挖掘时,它们有点不同。希望你收到了。 例如,如果我们用
@Service
注释对所有类进行注释,那么所有这些类都将在容器中注册,但情况会有所不同。请参阅,如果使用
@Repository
注释对某个类进行注释,则后处理器会自动查找所有异常转换器(PersistenceExceptionTranslator接口的实现)并通知所有标记有@Repository注释的bean,以便发现的转换器可以拦截并对抛出的异常应用适当的翻译

所以,再次强调,这一切都是关于某种异常处理的。现在,如果您使用
@Service
注释而不是
@Repository
注释来注释该类,则不会发现所需的转换器

现在关于@Service注释。此注释不会给表带来比组件更多的内容。它们是相同的,唯一的区别是@Service注释是@Component的专门化,它根据文档添加的唯一专门化是

此注释是一个通用的原型,各个团队可能会缩小其语义范围,并根据需要使用。 因此,@Service只是比@Component增加了更多的理解


因此,最后,我们了解到,所有这些都几乎相同,只是略有不同,@Repository注释在DAO类中有更多的好处。

是的,您可以使用
@Repository
@Service
注释任何类,它们的行为都是一样的,但文档中有一点很有趣:

因此,您可以使用@component注释组件类,但通过使用@Repository、@Service或@Controller注释它们,您的类更适合通过工具处理或与方面关联。例如,这些原型注释是切入点的理想目标

因此,如果您选择使用@Component还是@Service来 您的服务层,@service显然是更好的选择。同样地, 如上所述,@Repository已经被支持作为 在持久层中自动异常转换

在这里,您可以看到在第一段中讨论的两个重要问题切入点的理想目标,第二段是自动异常转换

显然,如果您知道AOP,第一个是可以理解的,第二个是这些注释的一个优点。让我们看看文档自动异常翻译的含义:

常见的数据访问异常。Spring可以包装您选择的O/R映射工具中的异常,将它们从专有(可能已检查)异常转换为公共运行时DataAccessException层次结构。这允许您处理大多数持久性异常,这些异常是不可恢复的,仅在适当的层中处理,而无需烦人的模板捕获/抛出和异常声明。您仍然可以在任何需要的地方捕获和处理异常。请记住,JDBC异常(包括特定于DB的方言)也会转换为相同的层次结构,这意味着您可以执行som