net.paoding.rose.jade.context.spring
类 JadeBeanFactoryPostProcessor

java.lang.Object
  继承者 net.paoding.rose.jade.context.spring.JadeBeanFactoryPostProcessor
所有已实现的接口:
org.springframework.beans.factory.config.BeanFactoryPostProcessor

public class JadeBeanFactoryPostProcessor
extends Object
implements org.springframework.beans.factory.config.BeanFactoryPostProcessor

JadeBeanFactoryPostProcessor 配置在发布包下的applicationContext-jade.xml中,Spring容器完成其内部的标准初始化工作后将调用本处理器,识别 符合Jade规范的 DAO 接口并将之配置为Spring容器的Bean定义,加入到Spring容器中。

=开关属性的设置=

jade在发布jar包时,将在发布包下的 applicationContext-jade.xml 文件配置本处理器(也就说本类一定会被Spring容器执行),为使jade能够适应不同的应用环境和业务需要,jade特 提供了一些系统属性设定约定,使得您可灵活地控制本处理器的行为,甚至将本处理器视为一个空处理器:

jade.context.spring
如果设置了一个非空属性值(非空时应该填写什么值Jade不做规定),表示jade的spring初始化工作不由本类负责。
所以,如果您觉得jade默认去自动扫描DAO接口并注册到Spring容器的行为是您不愿接受,您可以设置一个非空值给该属性, 从而叫停jade的这个行为。

jade.context.spring.com.yourcompany.dao.UserDAO
合法的值:0表示忽略,1表示肯定;除0和1外的设置(包括空值)都是非法的。
在jade的spring初始化工作由本类负责的前提下,将该属性设置为0表示该DAO不由本类负责读取并放到Spring容器中(即忽略之); 设置为1则表示该DAO由本类负责读取并放到Spring容器中(即肯定之)。
如果没有该系统属性,jade则读取它的上一级属性:jade.context.spring.com.yourcompany.dao 并以此类推,直至 jade.context.spring.*。这类属性在Jade统称为开关属性。

jade.context.spring.*
这个属性是所有开关属性的根,即类似 jade.context.spring.com 和 jade.context.spring.cn 之类的开关属性,它的父亲是 jade.context.spring.*, 而非 jade.context.spring
如果没有设置这个根属性,jade 将等价于其被设置为1。您可以将之设置为0, 这样就表示只有那些明确设置了开关属性为1的package或接口的类才由本处理器负责读取并放到Spring容器中。

=DAO的发现=

首先,本处理器会调用 RoseScanner.getJarOrClassesFolderResources() 获取类路径下的classes目录以及那些设置了rose标帜的jar包地址。 为了使jar包中的DAO能够被本处理器识别,其设置的rose标识中必须含有dao或DAO。

然后,本处理器将从classes目录或jar包中识别那些符合jade规范的DAO接口:

通过这两个步骤,本处理器完成了对DAO接口的发现,并最后将这些接口封装为 JadeFactoryBean 的形式注册到Spring容器中。

=数据源=

数据源 DataSource 提供了数据库的访问接口,jade通过DataSourceFactory 接口为DAO方法提供数据源,在本处利器所初始化的spring容器中,数据源的设置有两种方式:

==定制方式==


==默认方式==


当spring容器没有配置任何 DataSourceFactory 时,jade将启用默认方式为DAO配置数据源,即使用 SpringDataSourceFactory 为DAO提供数据源,从spring容器中寻找对应的数据源。对于给定的一个DAO接口,如 com.mycompany.myapp.dao.UserDAO, 其规则如下:


=SQL解析器=

当DAO方法被调用,执行数据库访问前,jade总是会先调用相应的SQL解析器,解析/改写SQL、设置相应的参数或运行时状态。
Jade使用 InterpreterFactory 为每个DAO方法配置对应的解析器。 本处理器使用的 InterpreterFactorySpringInterpreterFactory
SpringInterpreterFactory将获取配置在Spring容器中的 Interpreter ,按照标注在其上的Order排序,设置给各个DAO方法。

作者:
王志亮 [qieqie.wang@gmail.com], 廖涵 [in355hz@gmail.com]

构造方法摘要
JadeBeanFactoryPostProcessor()
           
 
方法摘要
 String getCacheProviderName(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
           
 DataAccessFactory getDataAccessFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
           
protected  boolean getDisableFlag(String daoType)
           
 InterpreterFactory getInterpreterFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
           
 RowMapperFactory getRowMapperFactory()
           
 void postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
          本方法将在Spring容器完成内部的标准初始化工作后被调用,在此识别 Jade DAO 接口并将配置为Spring容器的Bean定义,加入到Spring容器中。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

JadeBeanFactoryPostProcessor

public JadeBeanFactoryPostProcessor()
方法详细信息

getDataAccessFactory

public DataAccessFactory getDataAccessFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)

getInterpreterFactory

public InterpreterFactory getInterpreterFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)

getRowMapperFactory

public RowMapperFactory getRowMapperFactory()

getCacheProviderName

public String getCacheProviderName(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)

postProcessBeanFactory

public final void postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
                                  throws org.springframework.beans.BeansException
本方法将在Spring容器完成内部的标准初始化工作后被调用,在此识别 Jade DAO 接口并将配置为Spring容器的Bean定义,加入到Spring容器中。

因为本类将配置在发布包的 applicationContext-jade.xml 文件中,所以在rose环境中,本类一定会生效! 为了适应不同的应用环境,这里提供了一些机制使有更灵活的控制,请参考类级别的JavaDoc说明。

指定者:
接口 org.springframework.beans.factory.config.BeanFactoryPostProcessor 中的 postProcessBeanFactory
抛出:
org.springframework.beans.BeansException
另请参见:
BeanFactoryPostProcessor.postProcessBeanFactory(ConfigurableListableBeanFactory)

getDisableFlag

protected boolean getDisableFlag(String daoType)


Copyright © 2012. All Rights Reserved.