和注释可以在 Spring 中互换使用,或者除了充当符号设备之外,它们是否提供任何特定功能?@Component
@Repository
@Service
换句话说,如果我有一个服务类,并且我将注释从 更改为 ,它的行为是否仍然相同?@Service
@Component
还是注释也会影响类的行为和功能?
网友回答:
由于许多答案已经说明了这些注释的用途,因此我们将在这里重点介绍它们之间的一些细微差异。
首先是相似性
值得再次强调的第一点是,关于 BeanDefinition 的扫描自动检测和依赖注入,所有这些注释(即@Component、@Service、@Repository、
@Controller)都是相同的。我们可以使用一个代替
另一个,并且仍然可以绕过我们的方式。
@Component
这是一个通用的构造型注释,指示类是弹簧组件。
@Component
的特别之处在于只扫描而不寻找,而且一般来说。扫描它们是因为它们本身带有注释。<context:component-scan>
@Component
@Controller
@Service
@Repository
@Component
只需看一下 和注释定义:@Controller
@Service
@Repository
@Component
public @interface Service {
….
}
@Component
public @interface Repository {
….
}
@Component
public @interface Controller {
…
}
因此,说这种说法并没有错,并且是特殊类型的注释。 拾取它们并将其后续类注册为 bean,就像它们被注释为 .@Controller
@Service
@Repository
@Component
<context:component-scan>
@Component
特殊类型的注释也会被扫描,因为它们本身是用注释注释的,这意味着它们也是 s。如果我们定义自己的自定义注释并对其进行注释,它也将被扫描@Component
@Component
@Component
<context:component-scan>
@Repository
这是为了指示该类定义了一个数据存储库。
@Repository有什么特别之处?
除了指出这是一个基于注释的配置之外,它的工作是捕获特定于平台的异常,并将它们作为 Spring 的统一未检查异常之一重新抛出。为此,我们提供了 ,我们需要在 Spring 的应用程序上下文中添加,如下所示:@Repository
PersistenceExceptionTranslationPostProcessor
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
这个 bean 后处理器向任何带有注释的 bean 添加一个顾问,以便捕获任何特定于平台的异常,然后作为 Spring 未经检查的数据访问异常之一重新抛出。@Repository
@Controller
注释指示特定类充当控制器的角色。注释充当带注释的类的构造型,指示其角色。@Controller
@Controller
@Controller有什么特别之处?
我们不能将此注释与任何其他类似或 ,即使它们看起来相同。
调度程序扫描用注释的类,并检测其中用注释注释的方法。我们只能在那些类被注释的方法中使用,并且它不适用于、、等…@Service
@Repository
@Controller
@RequestMapping
@RequestMapping
@Controller
@Component
@Service
@Repository
注意:如果一个类已经通过任何替代方法注册为bean,例如通过@Bean
或通过@Component
,@Service
等…注释,然后如果类也使用@RequestMapping
注释进行注释,则可以选择@RequestMapping
。但那是另一回事。
@Service
@Service
Bean 在存储库层中保存业务逻辑和调用方法。
@Service有什么特别之处?
除了它用于指示它保存业务逻辑的事实之外,此注释中没有其他值得注意的内容;但谁知道呢,春天将来可能会增加一些额外的特殊。
还有什么?
与上面类似,在未来,Spring 可能会根据它们的分层约定为 和 添加特殊功能。因此,尊重约定并按照图层使用它始终是一个好主意。@Service
@Controller
@Repository
网友回答:
来自 Spring 文档:
注释是履行存储库
(也称为数据访问对象
或 DAO)的角色或构造型的任何类的标记。此标记的用途之一是异常的
自动翻译,如异常转换中所述。@Repository
Spring 提供了进一步的构造型注释:、
和 。 是任何
Spring 管理的组件的通用构造型。、 和 是
更具体用例的专用化(分别在
持久性层、服务和表示层)。
因此,您可以使用 对组件类进行批注,
但是,通过使用 、 或
改为对组件类进行批注,您的类更适合通过工具
进行处理或与方面关联。@Component
@Service
@Controller
@Component
@Repository
@Service
@Controller
@Component
@Component
@Repository
@Service
@Controller
例如,这些刻板型注释
是切入点的理想目标。、 ,并且
还可以在 Spring 框架的未来
版本中携带其他语义。因此,如果您在使用或为
服务层做出选择,显然是
更好的选择。同样,如前所述,已经
支持将其作为
持久性层中自动异常转换的标记。@Repository
@Service
@Controller
@Component
@Service
@Service
@Repository
注解 | 意义 |
---|---|
@Component |
任何 Spring 管理的组件的通用构造型 |
@Repository |
持久性层的构造型 |
@Service |
服务图层的构造型 |
@Controller |
表示层的构造型 (弹簧-MVC) |
网友回答:
它们几乎是一样的——它们都意味着这个班级是春豆。,并且是专门的 s。您可以选择对它们执行特定操作。例如:@Service
@Repository
@Controller
@Component
@Controller
豆子被弹簧-MVC使用@Repository
Bean 符合持久性异常转换的条件另一件事是,您将组件语义地指定为不同的层。
提供的一件事是您可以使用它注释其他注释,然后以与 相同的方式使用它们。@Component
@Service
例如,最近我做了:
@Component
@Scope("prototype")
public @interface ScheduledJob {..}
因此,所有注释的类都是春豆,除此之外,还注册为石英工作。您只需要提供处理特定注释的代码。@ScheduledJob
模板简介:该模板名称为【Spring 中的 @Component、@Repository 和 @Service 注解有什么区别?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。