Spring¿ò¼Üѧϰ[HibernateTemplate¶ÔHibernateµÄ·â×°](°Ë)
yHolder.set(this.cacheRegionFactory); } if (this.cacheProvider != null) { //ÅäÖûº´æÌṩÕß configTimeCacheProviderHolder.set(this.cacheProvider); } if (this.lobHandler != null) { //ÅäÖÃlob´¦ÀíÆ÷£¬ÓÃÓÚ´¦Àíclob/blobµÈ´ó×Ö¶ÎÀàÐÍÓ³Éä configTimeLobHandlerHolder.set(this.lobHandler); } //Hibernate²»ÔÊÐíÏÔʾÉèÖÃÀà¼ÓÔØÆ÷£¬Òò´ËÐèÒª±©Â¶ÏàÓ¦µÄÏß³ÌÉÏÏÂÎÄÀà¼ÓÔØÆ÷ Thread currentThread = Thread.currentThread(); ClassLoader threadContextClassLoader = currentThread.getContextClassLoader(); boolean overrideClassLoader = (this.beanClassLoader != null && !this.beanClassLoader.equals(threadContextClassLoader)); //Óõ±Ç°Àà¼ÓÔØÆ÷¸²¸Çµ±Ç°Ïß³ÌÉÏÏÂÎÄÀà¼ÓÔØÆ÷ if (overrideClassLoader) { currentThread.setContextClassLoader(this.beanClassLoader); } //ÅäÖÃHibernateÏà¹ØÊôÐÔ try { //Èç¹ûHibernate»á»°¹¤³§±©Â¶Ò»¸ö»á»°°ü×°µÄ´úÀí if (isExposeTransactionAwareSessionFactory()) { //ʹÓÃSpring¹ÜÀíµÄSession×÷ΪHibernateµ±Ç°»á»° config.setProperty( Environment.CURRENT_SESSION_CONTEXT_CLASS, SpringSessionContext.class.getName()); } //Èç¹ûHibernate»á»°¹¤³§Ö¸¶¨ÁËÊÂÎñ¹ÜÀíÆ÷£¬ÔòʹÓÃHibernateµÄÊÂÎñ¹ÜÀíÆ÷ if (this.jtaTransactionManager != null) { config.setProperty( Environment.TRANSACTION_STRATEGY, JTATransactionFactory.class.getName()); config.setProperty( Environment.TRANSACTION_MANAGER_STRATEGY, LocalTransactionManagerLookup.class.getName()); } //Èç¹ûHibernate»á»°¹¤³§Ã»ÓÐÖ¸¶¨ÊÂÎñ¹ÜÀíÆ÷£¬ÔòʹÓÃSpring¹ÜÀíµÄÊÂÎñ else { config.setProperty( Environment.TRANSACTION_STRATEGY, SpringTransactionFactory.class.getName()); } //ÉèÖÃSessionFactory¼¶±ðµÄʵÌåÀ¹½ØÆ÷ if (this.entityInterceptor != null) { config.setInterceptor(this.entityInterceptor); } //ÉèÖÃÃüÃû¹æÔ
ò if (this.namingStrategy != null) { config.setNamingStrategy(this.namingStrategy); } //×¢²áÖ¸¶¨µÄHibernateÀàÐͶ¨Òå if (this.typeDefinitions != null) { //ͨ¹ýJDK·´Éä»úÖÆ£¬»ñÈ¡HibernateÅäÖÃÎļþÖеÄcreateMappings·½·¨ Method createMappings = Configuration.class.getMethod("createMappings");//ͨ¹ýJDK·´É䣬»ñÈ¡createMappings·½·¨·µ»ØµÄorg.hibernate.cfg.Mappings¶Ô//ÏóµÄaddTypeDef·½·¨£¬¸Ã·½·¨µÄÈý¸ö²ÎÊýÀàÐÍΪ£ºString,StringºÍProperties Method addTypeDef = createMappings.getReturnType().getMethod( "addTypeDef", String.class, String.class, Properties.class); //ͨ¹ýJDK·´Éä»úÖÆµ÷ÓÃHibernateÅäÖÃÖеÄcreateMappings·½·¨£¬ //·µ»Øorg.hibernate.cfg.Mappings¶ÔÏó Object mappings = ReflectionUtils.invokeMethod(createMappings, config); //±éÀúHibernateÖÐËùÓÐ×¢²áµÄÀàÐͶ¨Òå for (TypeDefinitionBean typeDef : this.typeDefinitions) { //ͨ¹ý·´Éä»úÖÆ£¬µ÷ÓÃorg.hibernate.cfg.Mappings¶ÔÏóµÄ //addTypeDef·½·¨£¬¸Ã·½·¨µÄÈý¸ö²ÎÊý·Ö±ðΪ£ºÀàÐÍÃû³Æ£¬ÀàÐÍʵ//ÏÖÀ࣬ÀàÐͲÎÊý£¬ÎªHibernateÌí¼ÓÀàÐͶ¨Òå ReflectionUtils.invokeMethod(addTypeDef, mappings, typeDef.getTypeName(), typeDef.getTypeClass(), typeDef.getParameters()); } } //×¢²áHibernate¹ýÂËÆ÷ if (this.filterDefinitions != null) { for (FilterDefinition filterDef : this.filterDefinitions) { config.addFilterDefinition(filterDef); } } //´Ó¸ø¶¨×ÊԴ·¾¶¼ÓÔØHibernateÅäÖà if (this.configLocations != null) { for (Resource resource : this.configLocations) { config.configure(resource.getURL()); } } //Ìí¼ÓHibernateÊôÐÔ if (this.hibernateProperties != null) { config.addProperties(this.hibernateProperties); } //ÅäÖÃÊý¾ÝÔ´ if (dataSource != null) { //SpringÖÐĬÈϵÄHibernateÊý¾ÝÔ´Á¬½ÓÌṩÀà