gboat2.base.dao.aspect
类 GboatSessionFactoryAspect

java.lang.Object
  继承者 gboat2.base.dao.aspect.GboatSessionFactoryAspect
所有已实现的接口:
org.springframework.beans.factory.InitializingBean

public class GboatSessionFactoryAspect
extends Object
implements org.springframework.beans.factory.InitializingBean

实现 SessionFactory 动态切换的切面,该切面执行 SessionFactory 切换的规则:

  1. 如果目标实例的类型或方法(全限定名)配置了指定的 SessionFactory,则直接切换,如下面的配置示例中的 glodon.gbp.xxx.service.TestServiceImpl,在执行此类的所有方法时都会使用 mysqlSessionFactory
  2. 方法参数中包含 Class 类型参数,且该 Class 的名称匹配 targetSessionFactorys 中的任一规则
  3. 方法参数中包含 Map 类型参数,且该 Map 中 key 为 QuerySupport.PARAM_TABLENAME 的值匹配 targetSessionFactorys 中的任一规则
  4. 方法有且只有一个参数,且参数对象的 getClass() 方法得到的 Class 满足上面的第 2 点
  5. 不满足上述任意切换 SessionFactory的条件时,将清除 SessionFactory切换设置,直接使用默认 SessionFactory
要启用该切面,需在 Spring 配置文件中新增如下配置(配置示例):
 
 <-- 声明切面实例 -->
 <bean id="gboatSessionFactoryAspect" class="gboat2.base.dao.aspect.GboatSessionFactoryAspect">
     <property name="targetSessionFactorys">
         <!--  SessionFactory 与类名的映射关系,默认 SessionFactory不用配置 -->
         <map key-type="java.lang.String">
             <!-- 默认数据源的对应的 SessionFactory 不用在此处配置 --/>
             <entry key="glodon\.gbp\.enterprise\.model\..*" value-ref="gfmSessionFactory" />
         </map>
     </property>
 </bean>
 
 <-- 配置切面的拦截规则 -->
 <aop:config>
     <aop:pointcut id="gboatSessionFactoryPointcut" expression="execution(* gboat2.base.core.dao.IBaseDAO+.*(..))" />
     <aop:aspect ref="gboatSessionFactoryAspect" order="1" >
         <aop:before method="dynamicSetSessionFactory" pointcut-ref="gboatSessionFactoryPointcut"/>
     </aop:aspect>
 </aop:config>
 
 

从以下版本开始:
3.0
作者:
何明旺
另请参见:
gboat2.base.dao.impl.GboatSessionFactoryBean, gboat2.base.dao.GboatTransactionManager

构造方法摘要
GboatSessionFactoryAspect()
           
 
方法摘要
 void afterPropertiesSet()
           
 void dynamicSetSessionFactory(org.aspectj.lang.JoinPoint joinPoint)
           
 Map<String,org.hibernate.SessionFactory> getTargetSessionFactorys()
           
 void setTargetSessionFactorys(Map<String,org.hibernate.SessionFactory> targetSessionFactorys)
           
 void validateVo(Class<?> voClass)
          检查 vo 对象所关联的所有 po 是否均属于同一个 SessionFactory 管理,如果不是,则抛出 org.springframework.jdbc.CannotGetJdbcConnectionException.CannotGetJdbcConnectionException 异常
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

GboatSessionFactoryAspect

public GboatSessionFactoryAspect()
方法详细信息

dynamicSetSessionFactory

public void dynamicSetSessionFactory(org.aspectj.lang.JoinPoint joinPoint)
                              throws Exception
抛出:
Exception

validateVo

public void validateVo(Class<?> voClass)
检查 vo 对象所关联的所有 po 是否均属于同一个 SessionFactory 管理,如果不是,则抛出 org.springframework.jdbc.CannotGetJdbcConnectionException.CannotGetJdbcConnectionException 异常

参数:
voClass - VO 对象的类定义。如果为 null 或没有被 @gboat2.base.core.dao.annotation.Relations 注解,此方法将直接返回

getTargetSessionFactorys

public Map<String,org.hibernate.SessionFactory> getTargetSessionFactorys()

setTargetSessionFactorys

public void setTargetSessionFactorys(Map<String,org.hibernate.SessionFactory> targetSessionFactorys)

afterPropertiesSet

public void afterPropertiesSet()
                        throws Exception
指定者:
接口 org.springframework.beans.factory.InitializingBean 中的 afterPropertiesSet
抛出:
Exception


Copyright © 2014 广联达软件股份有限公司(Glodon Software Co., Ltd.). All rights reserved.