当前位置: 首页 > 面试题库 >

@Service批注应保存在哪里?接口还是实现?

沃弘图
2023-03-14
问题内容

我正在使用Spring开发应用程序。我需要使用@Service注释。我ServiceIServiceImpl这样ServiceImpl implements ServiceI。我对应该在哪里保留@Service注释感到困惑。

我应该用注释接口或实现@Service吗?这两种方法有什么区别?


问题答案:

我从不将@Component(或@Service…)放在界面上,因为这会使界面无用。让我解释一下原因。

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

权利要求2:接口的目的是它定义可以由几种实现方式实现的协定。在另一侧,你有注射点(@Autowired)。(IMHO)仅具有一个接口且只有一个实现该接口的类是无用的,并且违反了YAGNI。

事实:当你放:

  • @Component(或@Service,…)在界面上,
  • 有多个实现它的类,
  • 至少有两个类成为Spring Bean,并且
  • 有一个使用该接口进行基于类型的注入的注入点,

那么你将获得和NoUniqueBeanDefinitionException (或者你具有非常特殊的配置设置,包括环境,配置文件或限定符…)

结论:如果在接口上使用@Component(或@Service,…),则必须违反两个规则中的至少一个。因此,我认为将其放在@Component接口级别上是没有用的(除了一些罕见的情况)。



 类似资料:
  • 我正在使用Spring开发一个应用程序。我需要使用注释。我有和,这样。这里我很困惑应该在哪里保留注释。 我应该用注释接口还是实现?这两种做法有何不同?

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

  • 我查了Javadoc,什么也没有得到。我想知道这是怎么回事。 我找到了这个和这个,但这并不能消除我的疑虑。如果我漏了什么请告诉我。

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

  • 我有一个应用程序的体系结构:view->viewmodel->repository->Datasource 我的DataSource正在消费一个webservice然后接收Soap对象,我想将其转换为自定义Pojo对象。因此,通过使用RxJava,我通过以下流程调用datasource方法: 视图模型 存储库 数据源 然后我想知道应该在哪里转换datasource调用中接收到的SoapObject

  • 问题内容: 放置注释的最佳做法是什么?我应该注释接口方法还是实现? 问题答案: 好问题。我一直把它放在实现中。也许是因为它是实现细节,而不是抽象。 你可能希望不同的实现具有不同的事务行为。 El Guapo指出,除此之外,在接口上使用代理策略还可能引发更多问题。