更新时间:2018年12月19日15时02分 来源:传智播客 浏览次数:

| 01 02 03 04 05 06 07 08 09 10 11 12 | publicfinalclassSessionFactoryImpl implementsSessionFactoryImplementor{    privatefinaltransientCurrentSessionContext currentSessionContext;    publicSessionFactoryImpl(finalMetadataImplementor metadata, SessionFactoryOptions options) {        LOG.debug( "Building session factory");                ...省略大量代码        currentSessionContext = buildCurrentSessionContext();        ...省略大量代码    }} | 

| 1 2 3 | publicThreadLocalSessionContext(SessionFactoryImplementor factory) {    super( factory );} | 
| 1 2 3 4 5 6 7 8 | publicabstractclassAbstractCurrentSessionContext implementsCurrentSessionContext {    privatefinalSessionFactoryImplementor factory;    protectedAbstractCurrentSessionContext(SessionFactoryImplementor factory) {        this.factory = factory;    }    .....} | 

| 01 02 03 04 05 06 07 08 09 10 11 | publicabstractclassAbstractCurrentSessionContext implementsCurrentSessionContext {    privatefinalSessionFactoryImplementor factory;    protectedAbstractCurrentSessionContext(SessionFactoryImplementor factory) {        this.factory = factory;    }    publicSessionFactoryImplementor factory() {        returnfactory;    }....} | 
| 01 02 03 04 05 06 07 08 09 10 11 | privatestaticSession existingSession(SessionFactory factory) {    finalMap sessionMap = sessionMap();    if( sessionMap == null) {        returnnull;    }    return(Session) sessionMap.get( factory );}protectedstaticMap sessionMap() {    returnCONTEXT_TL.get();} | 
| 1 | privatestaticfinalThreadLocal<Map> CONTEXT_TL = newThreadLocal<Map>(); | 
| 1 2 3 4 5 6 7 8 | privatestaticvoiddoBind(org.hibernate.Session session, SessionFactory factory) {    Map sessionMap = sessionMap();    if( sessionMap == null) {        sessionMap = newHashMap();        CONTEXT_TL.set( sessionMap );    }    sessionMap.put( factory, session );} |