的代码结构分为core、governance、spring三个模块。本次重点分析核心模块。代码结构如下:图中标注的是本次重点分析的内容。jdbc的四大对象shardingsphere提供了两种创建DataSource的方式,ShardingSphereDataSourceFactory和YamlShardingSphereDataSourceFactory。YamlShardingSphereDataSourceFactory内部还是调用ShardingSphereDataSourceFactory的createDataSource方法:publicstaticDataSourcecreateDataSource(finalMapdataSourceMap,finalCollectionconfigurations,finalPropertiesprops)throwsSQLException{returnnewShardingSphereDataSource(dataSourceMap,configurations,props);}说明:本文主要以ShardingDataSource为切入点,分析Sharding-Sphere如何封装四大JDBC对象DataSource、Connection、Statement、ResultSet。DataSource类的结果如上图ShardingSphereDataSourceconstructorpublicShardingSphereDataSource(finalMapdataSourceMap,finalCollectionconfigurations,finalPropertiesprops)throwsSQLException{metaDataContexts=newMetaDataContextsBuilder(Collections.MapsingletonMap,Default_ICCollections.singletonMap(DefaultSchema.LOGIC_NAME,configurations),props).build();字符串xaTransactionMangerType=metaDataContexts.getProps().getValue(ConfigurationPropertyKey.XA_TRANSACTION_MANAGER_TYPE);transactionContexts=creategetTransactionContexts(metaDataContexts.getRebase(DataContext)),dataSourceMap,xaTransactionMangerType);}dataSourceMap是解析出来的ds集合,configurations是一些分片规则,props是其他属性值。然后往下看,持有MetaDataContexts元数据,返回一个ShardingSphereConnectionprivatefinalMetaDataContextsmetaDataContexts;@OverridepublicShardingSphereConnectiongetConnection(){returnnewShardingSphereConnection(getDataSourceMap(),metaDataContexts,transactionContexts,TransactionTypeHolder.get());}