我正在使用Spring开发一个应用程序。我需要使用@Service
注释。我有ServiceI
和ServiceImpl
这样的ServiceImpl implements ServiceI
。我在这里感到困惑,我不知道应该在哪里保存@Service
注释。
我应该用@Service
注释接口还是实现?这两种方法有什么不同?
发布于 2015-03-31 03:01:10
我只在实现类上使用了@Component
、@Service
、@Controller
和@Repository
注释,而没有在接口上使用。但是带有接口的@Autowired
注解仍然适用于我。如果您的接口只有一种实现,Spring component scan只需使用@Autowired
注释就可以自动找到它。如果您有多个实现,则需要使用@Qualifier
注释和@Autowired
在注入点注入正确的实现。
发布于 2013-12-17 02:32:53
在@Service上添加注释的好处是,它给出了一个提示,表明它是一个服务。我不知道是否有实现类会默认继承这个注解。
缺点是,通过使用特定于Spring的注释,您可以将您的接口与一个特定的框架(即spring )耦合。由于接口应该从实现中解耦,所以我不建议在接口中使用任何特定于框架的注释或对象部分。
发布于 2019-12-07 07:17:39
我会将@Service
放在您的类中,但将接口的名称作为参数放到注释中。
interface ServiceOne {}
@Service("ServiceOne")
class ServiceOneImpl implements ServiceOne{}
通过这样做,您可以获得所有的好处,并且仍然可以注入接口,但是可以获得类
@Autowired
private ServiceOne serviceOne;
因此,您的接口不受spring框架的约束,您可以随时更改类,而不必更新所有注入点。
因此,如果我想要更改实现类,我可以只注释新类并从第一个类中删除,但这就是需要更改的全部内容。如果你注入这个类,当你想要改变impl类的时候,你可能有很多工作要做。
https://stackoverflow.com/questions/16351780
复制相似问题