springboot2 @Mapper注解问题

发布时间 2023-11-09 20:09:37作者: 嘎嘎鸭2

@Mapper

public interface DeptMapper {

      Dept getById(Integer id);

}

问:这段代码是把这个接口注入到spring的bean容器当中去了,但是spring的bean容器不是存的实例化对象吗?

答:

在Spring框架中,将一个类(或接口)注入到Spring的容器中,即将其声明为一个Bean。这样,Spring容器会负责创建该Bean的实例,并将其管理起来。
对于@Mapper注解的接口,它通常是使用MyBatis框架来进行数据库操作的一种方式。当您在Spring Boot应用程序中使用@Mapper注解并将接口声明为Bean时,实际上是将MyBatis的Mapper接口交给Spring容器管理。
尽管MyBatis的Mapper接口不需要实现类,但是在运行时,Spring会针对这些带有@Mapper注解的接口生成代理对象,并将其纳入Spring的IOC容器中进行管理。这样,其他的组件可以通过依赖注入的方式使用这些Mapper接口,而不关心具体的实现细节。
通过将DeptMapper接口声明为Spring Bean,您可以在其他组件中使用DeptMapper进行注入,类似于以下示例:
@Service
public class DeptService {
private final DeptMapper deptMapper;

public DeptService(DeptMapper deptMapper) {
this.deptMapper = deptMapper;
}

// 可以在这里使用deptMapper进行数据库操作
}

在上述示例中,DeptService通过构造函数注入了DeptMapper。Spring会自动将DeptMapper的代理对象注入到DeptService中,以便在DeptService中可以使用deptMapper执行数据库操作。
因此,虽然Spring的容器存储的是Bean的实例化对象,但在某些情况下,这些对象是通过代理模式动态生成的,以便提供特定的功能,如MyBatis的Mapper接口。