code: private void registerDAODefinition(ConfigurableListableBeanFactory beanFactory,
              BeanDefinition beanDefinition) {
          final String daoClassName = beanDefinition.getBeanClassName();
          MutablePropertyValues propertyValues = beanDefinition.getPropertyValues();
          /*
           * 属性及其设置要按 JadeFactoryBean 的要求来办
           */
          propertyValues.addPropertyValue("objectType", daoClassName);
          propertyValues.addPropertyValue("dataAccessFactory", getDataAccessFactory(beanFactory));
          propertyValues.addPropertyValue("rowMapperFactory", getRowMapperFactory());
          propertyValues.addPropertyValue("interpreterFactory", getInterpreterFactory(beanFactory));
          String cacheProviderName = getCacheProviderName(beanFactory);
          if (cacheProviderName != null) {
              RuntimeBeanReference beanRef = new RuntimeBeanReference(cacheProviderName);
              propertyValues.addPropertyValue("cacheProvider", beanRef);
          }
          String statementWrapperProvider = getStatementWrapperProvider(beanFactory);
          if (statementWrapperProvider != null) {
              RuntimeBeanReference beanRef = new RuntimeBeanReference(statementWrapperProvider);
              propertyValues.addPropertyValue("statementWrapperProvider", beanRef);
          }
          ScannedGenericBeanDefinition scannedBeanDefinition = (ScannedGenericBeanDefinition) beanDefinition;
          scannedBeanDefinition.setPropertyValues(propertyValues);
          scannedBeanDefinition.setBeanClass(JadeFactoryBean.class);
  
          DefaultListableBeanFactory defaultBeanFactory = (DefaultListableBeanFactory) beanFactory;
          defaultBeanFactory.registerBeanDefinition(daoClassName, beanDefinition);
  
          if (logger.isDebugEnabled()) {
              logger.debug("[jade] register DAO: " + daoClassName);
          }
      }
docs: /*
  将找到的一个DAO接口注册到Spring容器中