ibatis代码垃圾还是敏捷

ibaits代码主要是以下几个类:

SqlMapClient 接口

SqlMapClientImpl 实现SqlMapClient

  提供CRUD等方法

SqlMapExecutorDelegate其实SqlMapClientImpl 的CRUD方法都是由此类委托的

SqlExecutor这个类是执行的核心SqlMapExecutorDelegate的方法其实最后调用SqlExecutor的方法

 

---------------------------

 SqlMapClient sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);

 

 public static SqlMapClient buildSqlMapClient(Reader reader) {
    return new SqlMapConfigParser().parse(reader);       //看SqlMapConfigParser类parse方法
  }

 

  public SqlMapClient parse(Reader reader) {
    try {
      usingStreams = false;

      parser.parse(reader);
      return state.getConfig().getClient();//关键
    } catch (Exception e) {
      throw new RuntimeException("Error occurred.  Cause: " + e, e);
    }
  }

----------------------------------------------------------------------------

 SqlMapConfiguration config = new SqlMapConfiguration();//硬编码

 

 public SqlMapConfiguration() {
    errorContext = new ErrorContext();
    delegate = new SqlMapExecutorDelegate();
    typeHandlerFactory = delegate.getTypeHandlerFactory();
    client = new SqlMapClientImpl(delegate);
    registerDefaultTypeAliases();
  }
构造器更夸张

 

没有提供方法注入delegate

 

 public SqlMapExecutorDelegate() {
    mappedStatements = new HashMap();
    cacheModels = new HashMap();
    resultMaps = new HashMap();
    parameterMaps = new HashMap();

    sqlExecutor = new SqlExecutor();
    typeHandlerFactory = new TypeHandlerFactory();
    dataExchangeFactory = new DataExchangeFactory(typeHandlerFactory);
  }

每天提供注入SqlExecutor类自己实现就要麻烦注入了!

 

O(∩_∩)O~  不知道ibatis设计者为什么这样做

但是 代码 基本 都在 构造器中 new硬编码的 想注入很难

 

不过可以自己实现类extends以上类 然后想办法反射注入

 

在构造SqlMapClient 对象时间注入

 

当然也可以利用spring管理不过自己也要改造ibatis

 

下次写代码 来 说明这个问题

 

不过建议ibatis能够 提供构造器 和setXX注入相关 来扩展!

 

免得反射,或者我们自己改造源代码 不好升级

你可能感兴趣的:(spring,ibatis)