Interceptor 接口声明 , 有三个方法
Objec tintercept(Invocation invocation)throws Throwable;
Object plugin(Object target);
void set Properties(Properties properties);
问题一: 我们的 Interceptor 是何时被注册到 ibatis 的, 注册到哪里去了
首先回答注册到哪里去: configuration.InterceptorChain 中 , 结构为 : List interceptors =new ArrayList();
xml 声明 Interceptor 的地方 有两个:
-
ibatis 的 config 配置 中配置 , 这个配置文件 我们一般叫做 mybatis-config.xml
-
spring 配置数据源的地方配置 sqlSessionFactory(class=“org.mybatis.spring.SqlSessionFactoryBean”) 时 以property 的方式给sqlSessionFactoryBean 的 plugins 赋值
① 方式声明的plugin 添加的 configuration的 InterceptorChain 路径为: SqlSessionFactoryBean.afterPropertiesSet().buildSqlSessionFactory() —> XmlConfigBuilder.parse().parseConfiguration(XNode root).pluginElement(root.evalNode(“plugins”)).configuration.addInterceptor(interceptorInstance)
进而调用 InterceptorChain的addInterceptor 方法添加 到 I