MyBatis-08-Spring的MyBatis Interceptor

YangDanMua發表於2024-04-16

addInterceptor

image

3個地方

  • XML 解析的
  • SqlSessionFactoryBean: 生成 SqlSession 的 FactoryBean
  • PageHelperAutoConfiguration: 分頁助手的自動配置

SqlSessionFactoryBean

發現現在都沒有將他作為一個 FactoryBean 使用了
getObject 呼叫了 afterPropertiesSet 生成 SqlSessionFactory 例項
原來 onApplicationEvent 的作用是啥?

@Override
public SqlSessionFactory getObject() throws Exception {
  // 沒有例項則呼叫 afterPropertiesSet 生成
  if (this.sqlSessionFactory == null) {
    afterPropertiesSet();
  }
  // 返回例項
  return this.sqlSessionFactory;
}

@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
  if (failFast) {
    // fail-fast -> check all statements are completed
	// ? 啥
    this.sqlSessionFactory.getConfiguration().getMappedStatementNames();
  }
}

@Override
public void afterPropertiesSet() throws Exception {
  // 資料來源、sqlSessionFactoryBuilder 必須已存在
  notNull(dataSource, "Property 'dataSource' is required");
  notNull(sqlSessionFactoryBuilder, "Property 'sqlSessionFactoryBuilder' is required");
  // 要麼存在配置例項, 要麼存在配置檔案路徑
  state((configuration == null && configLocation == null) || !(configuration != null && configLocation != null),
      "Property 'configuration' and 'configLocation' can not specified with together");

  this.sqlSessionFactory = buildSqlSessionFactory();
}

相關文章