@Service批注应保存在哪里?接口还是实现?
我正在使用Spring开发应用程序。我需要使用@Service
注释。我ServiceI
和ServiceImpl
这样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