当前位置: 首页 > 知识库问答 >
问题:

@service注释应该保存在哪里?接口还是实现?

蓝泰平
2023-03-14

我正在使用Spring开发一个应用程序。我需要使用@service注释。我有ServiceIServiceImpl,这样ServiceImpl就实现了ServiceI。这里我很困惑应该在哪里保留@service注释。

我应该用@service注释接口还是实现?这两种做法有何不同?

共有1个答案

莘绍元
2023-03-14

我从不将@component(或@service,...)放在接口上,因为这会使接口无用。让我解释一下原因。

声明1:如果您有一个接口,那么您希望将该接口用于注入点类型。

权利要求2:接口的目的是定义一个可以由多个实现实现的契约。在另一侧,您有您的注入点(@autowired)。只有一个接口和一个实现它的类(IMHO)是无用的,并且违反了Yagni。

    接口上的
  • @component(或@service,...)
  • 有多个实现它的类,
  • 至少有两个类成为Spring bean,并且
  • 具有使用基于类型的注入接口的注入点,

然后您将获得和nouniqueBeanDefinitionException(或者您有一个非常特殊的配置设置,包括环境、配置文件或限定符...)

结论:如果在接口上使用@component(或@service,...),则必须至少违反两个clain中的一个。因此,我认为将@component放在接口级别是没有用的(除了一些罕见的场景)。

 类似资料:
  • 问题内容: 我正在使用Spring开发应用程序。我需要使用注释。我和这样。我对应该在哪里保留注释感到困惑。 我应该用注释接口或实现吗?这两种方法有什么区别? 问题答案: 我从不将(或…)放在界面上,因为这会使界面无用。让我解释一下原因。 声明1:如果你有一个接口,那么你想将该接口用于注入点类型。 权利要求2:接口的目的是它定义可以由几种实现方式实现的协定。在另一侧,你有注射点()。(IMHO)仅具

  • 问题内容: 来自代码标题的问题: 与 问题答案: 来自http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html Spring团队的建议是,您只应使用注释对具体的类进行注释,而不是对接口进行注释。您当然可以将注释放置在接口(或接口方法)上,但这仅在您使用基于接口的代理时才能按预期使用。注解 未继承 的事实意

  • 我使用Spring Tools来开发我的网站。在这个网站上,管理员可以上传图像和其他文件,如PDF和CSV,客户可以稍后下载。 使用Spring工具时,我将目标文件夹设置为static/images/以上载新图像,这非常有效。但是在我的Linux服务器上部署了这个jar之后,Spring boot找不到静态文件夹,所以我使用了我发现的这个函数:如何动态获取Spring boot应用程序jar父文件

  • 问题内容: 你应该将放置在类和/或它们的方法中,还是更好地注释使用DAO对象调用的Service类?还是对两个“层”都进行注释是否有意义? 问题答案: 我认为交易属于服务层。这是了解工作单元和用例的人。如果你将多个DAO注入到一个服务中,而这些DAO需要在单个事务中一起工作,那么这是正确的答案。

  • 问题内容: 哪个更正确? 这(在方法上带有@Autowired注释)? 这(在属性上带有@Autowired注释)? @Autowired注释应该去哪里? 问题答案: 我个人更喜欢你的第一个选择(构造函数注入),因为该字段可以标记为final: 构造函数注入还允许你在单元测试中测试类,而无需依赖Spring的代码。 第二种选择最好写成: 使用字段注入,Spring将创建对象,然后更新标记为注入的字

  • 问题内容: 我正在使用来自包java.sql的接口连接 实际上,我虽然是一个Class,但是当我尝试查看源代码时却发现它是一个Interface。 在Connection接口的源代码中,每种方法只有一行,没有任何实现!! 是什么让这个界面正常工作? 要连接的数据库:MySql 连接源代码页:http : //www.docjar.com/html/api/java/sql/Connection.j