你们有没有想过:为什么mybatis-plus的@service注解是注解在service接口上,而不是我们的serviceImpl上,明明我们的具体实现是实现在impl上,但为啥不是impl实现类上使用@service。而且我们的注入依赖为什么是注入接口。而不是实现类。
经过我查阅大量资料后才晓得:
在Spring中,使用@Service注解标记的类通常表示业务逻辑层的组件。在MyBatis-Plus中,为了实现简单的CRUD操作,可以使用IService接口提供基本的增删改查操作。IService是一个标记接口,没有任何实现,只是为了定义通用的方法签名。
MyBatis-Plus提供了IService接口的一个默认实现类ServiceImpl,该类实现了IService接口中定义的通用方法。因此,在使用MyBatis-Plus时,我们可以将@Service注解标记在IService的子接口上,即自定义的业务逻辑接口上,以表明该接口是一个业务逻辑层的组件。
为了将接口注入到Spring容器中,需要使用Spring的依赖注入机制。Spring会查找所有被@Service注解标记的类,并将其实例化为Spring Bean,并将其注入到其他组件中。
在MyBatis-Plus中,@Autowired注解通常注解在业务逻辑接口上,以将该接口的实现类注入到其他组件中。因为@Autowired默认按照类型注入,即查找与被注入的接口类型相同的实现类,因此在注入时会自动注入ServiceImpl类的实例,而不是IService的实例。这样,我们就可以使用@Autowired注解将MyBatis-Plus提供的基本增删改查方法注入到我们的业务逻辑组件中,从而简化开发。
有时候我们注入接口的时候,会爆红,此时我们应该使用由JDK提供的@Resource注解进行注入。