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

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

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

回答:

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

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

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

事实:当你放:

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

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

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

以上是 @Service批注应保存在哪里?接口还是实现? 的全部内容, 来源链接: utcz.com/qa/431124.html

回到顶部