使用compnent注入的自定义mabatis拦截器找不到executor下的close方法
时间: 2024-03-16 11:41:31 浏览: 11
如果你使用 `@Component` 注解将自定义的 Mybatis 拦截器注入到 Spring 容器中,并且在拦截器中调用了 `Executor` 接口的 `close` 方法,可能会出现找不到该方法的情况。
这是因为 `Executor` 接口的 `close` 方法是在 Mybatis 3.5.0 版本中新增的,而 Spring Boot 默认集成的 Mybatis 版本是 2.1.4,没有该方法。因此,需要升级 Mybatis 的版本。
可以在 `pom.xml` 文件中添加如下依赖来升级 Mybatis 版本:
```
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
```
然后,在自定义的拦截器中注入 `SqlSessionFactory`,并通过它获取 `Executor` 对象,调用 `close` 方法即可:
```
@Component
public class MyInterceptor implements Interceptor {
@Autowired
private SqlSessionFactory sqlSessionFactory;
@Override
public Object intercept(Invocation invocation) throws Throwable {
Executor executor = sqlSessionFactory.openSession().getExecutor();
// do something
executor.close();
return invocation.proceed();
}
// 其他方法
}
```
注意,在使用自定义拦截器时,需要在 Mybatis 的配置文件中将拦截器添加到 `interceptor` 标签中,例如:
```
<configuration>
<settings>
<!-- 其他设置 -->
</settings>
<typeAliases>
<!-- 类型别名 -->
</typeAliases>
<plugins>
<!-- 其他插件 -->
<plugin interceptor="com.example.MyInterceptor">
<!-- 自定义配置 -->
</plugin>
</plugins>
</configuration>
```
需要将 `com.example.MyInterceptor` 替换为你自己的拦截器类路径。