首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >@Service注解应该保存在哪里?接口还是实现?

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

Stack Overflow用户
提问于 2013-05-03 12:51:03
回答 5查看 86.2K关注 0票数 166

我正在使用Spring开发一个应用程序。我需要使用@Service注释。我有ServiceIServiceImpl这样的ServiceImpl implements ServiceI。我在这里感到困惑,我不知道应该在哪里保存@Service注释。

我应该用@Service注释接口还是实现?这两种方法有什么不同?

EN

回答 5

Stack Overflow用户

发布于 2015-03-31 03:01:10

我只在实现类上使用了@Component@Service@Controller@Repository注释,而没有在接口上使用。但是带有接口的@Autowired注解仍然适用于我。如果您的接口只有一种实现,Spring component scan只需使用@Autowired注释就可以自动找到它。如果您有多个实现,则需要使用@Qualifier注释和@Autowired在注入点注入正确的实现。

票数 16
EN

Stack Overflow用户

发布于 2013-12-17 02:32:53

在@Service上添加注释的好处是,它给出了一个提示,表明它是一个服务。我不知道是否有实现类会默认继承这个注解。

缺点是,通过使用特定于Spring的注释,您可以将您的接口与一个特定的框架(即spring )耦合。由于接口应该从实现中解耦,所以我不建议在接口中使用任何特定于框架的注释或对象部分。

票数 7
EN

Stack Overflow用户

发布于 2019-12-07 07:17:39

我会将@Service放在您的类中,但将接口的名称作为参数放到注释中。

代码语言:javascript
复制
interface ServiceOne {}

@Service("ServiceOne")
class ServiceOneImpl implements ServiceOne{}

通过这样做,您可以获得所有的好处,并且仍然可以注入接口,但是可以获得类

代码语言:javascript
复制
@Autowired 
private ServiceOne serviceOne;

因此,您的接口不受spring框架的约束,您可以随时更改类,而不必更新所有注入点。

因此,如果我想要更改实现类,我可以只注释新类并从第一个类中删除,但这就是需要更改的全部内容。如果你注入这个类,当你想要改变impl类的时候,你可能有很多工作要做。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16351780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档