java类org.springframework.beans.factory.support.GenericBeanDefinition的实例源码

ClassPathMapperScanner.java 文件源码 项目:jkami 阅读 24 收藏 0 点赞 0 评论 0
@Override
public Set<BeanDefinitionHolder> doScan(String... basePackages) {
    Set<BeanDefinitionHolder> beanDefinitions = super.doScan(basePackages);
    if (beanDefinitions.isEmpty()) {
        logger.warn("No  mapper was found in '" + Arrays.toString(basePackages) + "' package. Please check your configuration.");
    } else {
        for (BeanDefinitionHolder holder : beanDefinitions) {
            GenericBeanDefinition definition = (GenericBeanDefinition) holder.getBeanDefinition();
            if (logger.isDebugEnabled()) {
                logger.debug("Creating MapperFactoryBean with name '" + holder.getBeanName() + "' and '" + definition.getBeanClassName()
                        + "' mapperInterface");
            }
            definition.getPropertyValues().add("mapperProxy", getRegistry().getBeanDefinition("mapperProxy"));
            definition.getPropertyValues().add("mapperInterface", definition.getBeanClassName());
            definition.setBeanClass(MapperFactoryBean.class);
            definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
        }
    }
    return beanDefinitions;
}
NestedDefinitionMetadataTest.java 文件源码 项目:gemini.blueprint 阅读 28 收藏 0 点赞 0 评论 0
public void testOverallMetadata() throws Exception {

        BeanDefinition def = new GenericBeanDefinition();
        assertEquals(new SimpleComponentMetadata(null, def), new SimpleComponentMetadata("foo", def));

        Collection<ComponentMetadata> metadata = blueprintContainer.getMetadata(ComponentMetadata.class);

        for (ComponentMetadata componentMetadata : metadata) {
            if (componentMetadata instanceof ServiceReferenceMetadata) {
                System.out.println(componentMetadata.getId());
            }
        }
        // 1+1+3+4+4+5+3+1=22
        assertEquals(22, metadata.size());
        System.out.println(blueprintContainer.getComponentIds());
    }
GroovyBeanDefinitionWrapper.java 文件源码 项目:lams 阅读 25 收藏 0 点赞 0 评论 0
protected AbstractBeanDefinition createBeanDefinition() {
    AbstractBeanDefinition bd = new GenericBeanDefinition();
    bd.setBeanClass(this.clazz);
    if (!CollectionUtils.isEmpty(this.constructorArgs)) {
        ConstructorArgumentValues cav = new ConstructorArgumentValues();
        for (Object constructorArg : this.constructorArgs) {
            cav.addGenericArgumentValue(constructorArg);
        }
        bd.setConstructorArgumentValues(cav);
    }
    if (this.parentName != null) {
        bd.setParentName(this.parentName);
    }
    this.definitionWrapper = new BeanWrapperImpl(bd);
    return bd;
}
SpringBeanFactory.java 文件源码 项目:dcmp 阅读 31 收藏 0 点赞 0 评论 0
/**
 * Reloading spring bean
 *
 * @param clazz
 * @param initMethod
 * @param destroyMethod
 * @throws Exception
 */
public void reloadBean(Class<?> clazz, String initMethod, String destroyMethod) throws Exception {

    BeanDefinitionRegistry beanDefinitionRegistry = ((BeanDefinitionRegistry) this.beanFactory);
    String beanName = clazz.getSimpleName().substring(0, 1).toLowerCase() + clazz.getSimpleName().substring(1);

    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
    beanDefinition.setBeanClass(clazz);
    beanDefinition.setAutowireCandidate(true);

    if (StringUtils.isNotBlank(initMethod)) {
        beanDefinition.setInitMethodName(initMethod);
    }

    if (StringUtils.isNotBlank(destroyMethod)) {
        beanDefinition.setDestroyMethodName(destroyMethod);
    }

    if (beanDefinitionRegistry.containsBeanDefinition(beanName)) {
        beanDefinitionRegistry.removeBeanDefinition(beanName);
    }

    beanDefinitionRegistry.registerBeanDefinition(beanName, beanDefinition);
    applicationContext.getBean(beanName);
}
ServiceStarter.java 文件源码 项目:albedo-thrift 阅读 28 收藏 0 点赞 0 评论 0
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    BeanDefinitionRegistry registry=(BeanDefinitionRegistry)beanFactory;
    CuratorFramework curatorFramework = beanFactory.getBean(CuratorFramework.class);
    ServiceRouter serviceRouter = beanFactory.getBean(ServiceRouter.class);
    for(Class clazz:list){
        GenericBeanDefinition definition=(GenericBeanDefinition) BeanDefinitionBuilder.genericBeanDefinition(clazz).getBeanDefinition();
        definition.getPropertyValues().addPropertyValue("innerClass",clazz);
        definition.getPropertyValues().addPropertyValue("factory",beanFactory);
        ServiceApi serviceApi = map.get(clazz.getName());
        definition.getPropertyValues().addPropertyValue("proccessName",serviceApi.getName());

        String path = "/"+clazz.getName()+"/"+ (serviceApi!=null ? serviceApi.getVersion() :
                ThriftConstant.DEFAULT_VERSION);
        ServiceDiscover serviceDiscover = new ZookeeperServiceDiscover(curatorFramework, path);

        definition.getPropertyValues().addPropertyValue("serverManager",
                new ServerManager(serviceDiscover, serviceRouter));

        definition.setBeanClass(ProxyFactoryBean.class);
        definition.setDestroyMethodName("close");
        registry.registerBeanDefinition(clazz.getName(), definition);
    }

}
WestCacheableClassPathScanner.java 文件源码 项目:westcache 阅读 41 收藏 0 点赞 0 评论 0
/**
 * Calls the parent search that will search and register all the candidates.
 * Then the registered objects are post processed to set them as
 * MapperFactoryBeans
 */
@Override
public Set<BeanDefinitionHolder> doScan(String... basePackages) {
    Set<BeanDefinitionHolder> beanDefinitions = super.doScan(basePackages);

    if (beanDefinitions.isEmpty()) {
        log.warn("No WestCacheable was found in '{}' package. " +
                        "Please check your configuration.",
                Arrays.toString(basePackages));
        return beanDefinitions;
    }

    for (val holder : beanDefinitions) {
        val definition = (GenericBeanDefinition) holder.getBeanDefinition();
        log.debug("Creating WestCacheableFactoryBean with name '{}' and '{}'",
                holder.getBeanName(), definition.getBeanClassName());

        // the mapper interface is the original class of the bean
        // but, the actual class of the bean is MapperFactoryBean
        definition.getPropertyValues().add("targetClass", definition.getBeanClassName());
        definition.setBeanClass(WestCacheableFactoryBean.class);
    }

    return beanDefinitions;
}
QualifierAnnotationTests.java 文件源码 项目:spring4-understanding 阅读 29 收藏 0 点赞 0 评论 0
@Test
public void testQualifiedByParentValue() {
    StaticApplicationContext parent = new StaticApplicationContext();
    GenericBeanDefinition parentLarry = new GenericBeanDefinition();
    parentLarry.setBeanClass(Person.class);
    parentLarry.getPropertyValues().add("name", "ParentLarry");
    parentLarry.addQualifier(new AutowireCandidateQualifier(Qualifier.class, "parentLarry"));
    parent.registerBeanDefinition("someLarry", parentLarry);
    GenericBeanDefinition otherLarry = new GenericBeanDefinition();
    otherLarry.setBeanClass(Person.class);
    otherLarry.getPropertyValues().add("name", "OtherLarry");
    otherLarry.addQualifier(new AutowireCandidateQualifier(Qualifier.class, "otherLarry"));
    parent.registerBeanDefinition("someOtherLarry", otherLarry);
    parent.refresh();

    StaticApplicationContext context = new StaticApplicationContext(parent);
    BeanDefinitionReader reader = new XmlBeanDefinitionReader(context);
    reader.loadBeanDefinitions(CONFIG_LOCATION);
    context.registerSingleton("testBean", QualifiedByParentValueTestBean.class);
    context.refresh();
    QualifiedByParentValueTestBean testBean = (QualifiedByParentValueTestBean) context.getBean("testBean");
    Person person = testBean.getLarry();
    assertEquals("ParentLarry", person.getName());
}
GroovyBeanDefinitionWrapper.java 文件源码 项目:spring4-understanding 阅读 25 收藏 0 点赞 0 评论 0
protected AbstractBeanDefinition createBeanDefinition() {
    AbstractBeanDefinition bd = new GenericBeanDefinition();
    bd.setBeanClass(this.clazz);
    if (!CollectionUtils.isEmpty(this.constructorArgs)) {
        ConstructorArgumentValues cav = new ConstructorArgumentValues();
        for (Object constructorArg : this.constructorArgs) {
            cav.addGenericArgumentValue(constructorArg);
        }
        bd.setConstructorArgumentValues(cav);
    }
    if (this.parentName != null) {
        bd.setParentName(this.parentName);
    }
    this.definitionWrapper = new BeanWrapperImpl(bd);
    return bd;
}
OptionScanner.java 文件源码 项目:leopard 阅读 22 收藏 0 点赞 0 评论 0
@Override
public Set<BeanDefinitionHolder> doScan(String... basePackages) {
    Set<BeanDefinitionHolder> beanDefinitions = super.doScan(basePackages);
    for (BeanDefinitionHolder holder : beanDefinitions) {
        GenericBeanDefinition definition = (GenericBeanDefinition) holder.getBeanDefinition();
        String id = getValue(definition);
        if (StringUtils.isEmpty(id)) {
            id = holder.getBeanName();
        }
        String className = holder.getBeanDefinition().getBeanClassName();
        // logger.info("holder:" + holder.getBeanName() + " className:" + className);
        OptionData.load(id, className);
        definition.getPropertyValues().add("innerClassName", definition.getBeanClassName());
        definition.setBeanClass(OptionFactoryBean.class);
    }
    return beanDefinitions;
}
ConfigurationPropertiesBindingPostProcessorTests.java 文件源码 项目:https-github.com-g0t4-jenkins2-course-spring-boot 阅读 23 收藏 0 点赞 0 评论 0
@Test
public void configurationPropertiesWithFactoryBean() throws Exception {
    ConfigurationPropertiesWithFactoryBean.factoryBeanInit = false;
    this.context = new AnnotationConfigApplicationContext() {
        @Override
        protected void onRefresh() throws BeansException {
            assertThat(ConfigurationPropertiesWithFactoryBean.factoryBeanInit)
                    .as("Init too early").isFalse();
            super.onRefresh();
        }
    };
    this.context.register(ConfigurationPropertiesWithFactoryBean.class);
    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
    beanDefinition.setBeanClass(FactoryBeanTester.class);
    beanDefinition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
    this.context.registerBeanDefinition("test", beanDefinition);
    this.context.refresh();
    assertThat(ConfigurationPropertiesWithFactoryBean.factoryBeanInit).as("No init")
            .isTrue();
}
DynamicDataSourceRegister.java 文件源码 项目:Dynamic-data-sources 阅读 34 收藏 0 点赞 0 评论 0
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
    Map<Object, Object> targetDataSources = new HashMap<Object, Object>();
    // 将主数据源添加到更多数据源中
    targetDataSources.put("dataSource", defaultDataSource);
    DynamicDataSourceContextHolder.dataSourceIds.add("dataSource");
    // 添加更多数据源
    targetDataSources.putAll(customDataSources);
    for (String key : customDataSources.keySet()) {
        DynamicDataSourceContextHolder.dataSourceIds.add(key);
    }

    // 创建DynamicDataSource
    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
    beanDefinition.setBeanClass(DynamicDataSource.class);
    beanDefinition.setSynthetic(true);
    MutablePropertyValues mpv = beanDefinition.getPropertyValues();
    mpv.addPropertyValue("defaultTargetDataSource", defaultDataSource);
    mpv.addPropertyValue("targetDataSources", targetDataSources);
    registry.registerBeanDefinition("dataSource", beanDefinition);

    logger.info("Dynamic DataSource Registry");
}
StoreUtils.java 文件源码 项目:spring-content 阅读 30 收藏 0 点赞 0 评论 0
public static Set<GenericBeanDefinition> getStoreCandidates(ResourceLoader loader, String[] basePackages) {
    StoreCandidateComponentProvider scanner = new StoreCandidateComponentProvider(false);
    //scanner.setConsiderNestedRepositoryInterfaces(shouldConsiderNestedRepositories());
    scanner.setResourceLoader(loader);
    //scanner.setEnvironment(environment);

    /*for (TypeFilter filter : getExcludeFilters()) {
        scanner.addExcludeFilter(filter);
    }*/

    Set<GenericBeanDefinition> result = new HashSet<>();

    for (String basePackage : basePackages) {
        Set<BeanDefinition> candidates = scanner.findCandidateComponents(basePackage);
        for (BeanDefinition candidate : candidates)
            result.add((GenericBeanDefinition)candidate);
    }

    return result;  
}
DynamicDataSourceRegister.java 文件源码 项目:kekoa 阅读 26 收藏 0 点赞 0 评论 0
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
    Map<Object, Object> targetDataSources = new HashMap<Object, Object>();
    // 将主数据源添加到更多数据源中
    targetDataSources.put("dataSource", defaultDataSource);
    DynamicDataSourceContextHolder.dataSourceIds.add("dataSource");
    // 添加更多数据源
    targetDataSources.putAll(customDataSources);
    for (String key : customDataSources.keySet()) {
        DynamicDataSourceContextHolder.dataSourceIds.add(key);
    }

    // 创建DynamicDataSource
    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
    beanDefinition.setBeanClass(DynamicDataSource.class);
    beanDefinition.setSynthetic(true);
    MutablePropertyValues mpv = beanDefinition.getPropertyValues();
    mpv.addPropertyValue("defaultTargetDataSource", defaultDataSource);
    mpv.addPropertyValue("targetDataSources", targetDataSources);
    registry.registerBeanDefinition("dataSource", beanDefinition);

    logger.info("Dynamic DataSource Registry");
}
GroovyBeanDefinitionWrapper.java 文件源码 项目:spring 阅读 31 收藏 0 点赞 0 评论 0
protected AbstractBeanDefinition createBeanDefinition() {
    AbstractBeanDefinition bd = new GenericBeanDefinition();
    bd.setBeanClass(this.clazz);
    if (!CollectionUtils.isEmpty(this.constructorArgs)) {
        ConstructorArgumentValues cav = new ConstructorArgumentValues();
        for (Object constructorArg : this.constructorArgs) {
            cav.addGenericArgumentValue(constructorArg);
        }
        bd.setConstructorArgumentValues(cav);
    }
    if (this.parentName != null) {
        bd.setParentName(this.parentName);
    }
    this.definitionWrapper = new BeanWrapperImpl(bd);
    return bd;
}
DataSourceScanner.java 文件源码 项目:tsharding 阅读 22 收藏 0 点赞 0 评论 0
/**
 * 将数据源注入到Spring中
 *
 * @param registry
 * @param dataSourcesMapping
 */
private void registerDataSources(BeanDefinitionRegistry registry,
                                 Map<String, Map<DataSourceType, DataSource>> dataSourcesMapping) {

    for (Map.Entry<String, Map<DataSourceType, DataSource>> entry : dataSourcesMapping.entrySet()) {
        final String name = entry.getKey();
        for (Map.Entry<DataSourceType, DataSource> subEntry : entry.getValue().entrySet()) {
            GenericBeanDefinition dataSourceBeanDefinition = new GenericBeanDefinition();
            dataSourceBeanDefinition.setBeanClass(DataSourceFactoryBean.class);
            ConstructorArgumentValues constructorArgumentValues = new ConstructorArgumentValues();
            constructorArgumentValues.addIndexedArgumentValue(0, subEntry.getValue());
            dataSourceBeanDefinition.setConstructorArgumentValues(constructorArgumentValues);
            String beanName = name + Character.toUpperCase(subEntry.getKey().name().charAt(0))
                    + subEntry.getKey().name().substring(1) + "DataSource";
            registry.registerBeanDefinition(beanName, dataSourceBeanDefinition);
        }
    }
}
ConfigurationPropertiesBindingPostProcessorTests.java 文件源码 项目:spring-boot-concourse 阅读 26 收藏 0 点赞 0 评论 0
@Test
public void configurationPropertiesWithFactoryBean() throws Exception {
    ConfigurationPropertiesWithFactoryBean.factoryBeanInit = false;
    this.context = new AnnotationConfigApplicationContext() {
        @Override
        protected void onRefresh() throws BeansException {
            assertThat(ConfigurationPropertiesWithFactoryBean.factoryBeanInit)
                    .as("Init too early").isFalse();
            super.onRefresh();
        }
    };
    this.context.register(ConfigurationPropertiesWithFactoryBean.class);
    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
    beanDefinition.setBeanClass(FactoryBeanTester.class);
    beanDefinition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
    this.context.registerBeanDefinition("test", beanDefinition);
    this.context.refresh();
    assertThat(ConfigurationPropertiesWithFactoryBean.factoryBeanInit).as("No init")
            .isTrue();
}
DynamicApplicationContextBuilder.java 文件源码 项目:indoqa-spring 阅读 27 收藏 0 点赞 0 评论 0
private static BeanDefinition createBeanDefinition(ComponentDefinition componentDefinition) {
    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();

    beanDefinition.setBeanClassName(componentDefinition.getComponentClass());
    beanDefinition.setScope(getScope(componentDefinition.getScope()));
    beanDefinition.setAutowireCandidate(true);
    beanDefinition.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_NAME);
    beanDefinition.setDependsOn(componentDefinition.getDependsOn());
    beanDefinition.setLazyInit(componentDefinition.isLazyInit());

    ConstructorArgumentValues constructorArgumentValues = new ConstructorArgumentValues();
    for (Object value : componentDefinition.getConstructorArguments()) {
        constructorArgumentValues.addIndexedArgumentValue(constructorArgumentValues.getArgumentCount(), value);
    }
    beanDefinition.setConstructorArgumentValues(constructorArgumentValues);

    MutablePropertyValues propertyValues = new MutablePropertyValues();
    for (PropertyValue propertyValue : componentDefinition.getPropertyValues()) {
        propertyValues.add(propertyValue.getName(), propertyValue.getValue());
    }
    beanDefinition.setPropertyValues(propertyValues);

    return beanDefinition;
}
MapperScanTest.java 文件源码 项目:mybatis-spring-1.2.2 阅读 27 收藏 0 点赞 0 评论 0
@Test
public void testScanWithExplicitSqlSessionTemplate() throws Exception {
  GenericBeanDefinition definition = new GenericBeanDefinition();
  definition.setBeanClass(SqlSessionTemplate.class);
  ConstructorArgumentValues constructorArgs = new ConstructorArgumentValues();
  constructorArgs.addGenericArgumentValue(new RuntimeBeanReference("sqlSessionFactory"));
  definition.setConstructorArgumentValues(constructorArgs);
  applicationContext.registerBeanDefinition("sqlSessionTemplate", definition);

  applicationContext.register(AppConfigWithSqlSessionTemplate.class);

  startContext();

  // all interfaces with methods should be loaded
  applicationContext.getBean("mapperInterface");
  applicationContext.getBean("mapperSubinterface");
  applicationContext.getBean("mapperChildInterface");
  applicationContext.getBean("annotatedMapper");

}
MapperScannerConfigurerTest.java 文件源码 项目:mybatis-spring-1.2.2 阅读 26 收藏 0 点赞 0 评论 0
@Before
public void setupContext() {
  applicationContext = new GenericApplicationContext();

  // add the mapper scanner as a bean definition rather than explicitly setting a
  // postProcessor on the context so initialization follows the same code path as reading from
  // an XML config file
  GenericBeanDefinition definition = new GenericBeanDefinition();
  definition.setBeanClass(MapperScannerConfigurer.class);
  definition.getPropertyValues().add("basePackage", "org.mybatis.spring.mapper");
  applicationContext.registerBeanDefinition("mapperScanner", definition);

  setupSqlSessionFactory("sqlSessionFactory");

  // assume support for autowiring fields is added by MapperScannerConfigurer via
  // org.springframework.context.annotation.ClassPathBeanDefinitionScanner.includeAnnotationConfig
}
MapperScannerConfigurerTest.java 文件源码 项目:mybatis-spring-1.2.2 阅读 23 收藏 0 点赞 0 评论 0
@Test
public void testNameGenerator() {
  GenericBeanDefinition definition = new GenericBeanDefinition();
  definition.setBeanClass(BeanNameGenerator.class);
  applicationContext.registerBeanDefinition("beanNameGenerator", definition);

  applicationContext.getBeanDefinition("mapperScanner").getPropertyValues().add(
      "nameGenerator", new RuntimeBeanReference("beanNameGenerator"));

  startContext();

  // only child inferfaces should be loaded and named with its class name
  applicationContext.getBean(MapperInterface.class.getName());
  applicationContext.getBean(MapperSubinterface.class.getName());
  applicationContext.getBean(MapperChildInterface.class.getName());
  applicationContext.getBean(AnnotatedMapper.class.getName());
}
MapperScannerConfigurerTest.java 文件源码 项目:mybatis-spring-1.2.2 阅读 22 收藏 0 点赞 0 评论 0
@Test
public void testScanWithExplicitSqlSessionFactoryViaPlaceholder() throws Exception {
  setupSqlSessionFactory("sqlSessionFactory2");

  // use a property placeholder for the session factory name
  applicationContext.getBeanDefinition("mapperScanner").getPropertyValues().add(
      "sqlSessionFactoryBeanName", "${sqlSessionFactoryBeanNameProperty}");

  Properties props = new java.util.Properties();
  props.put("sqlSessionFactoryBeanNameProperty", "sqlSessionFactory2");

  GenericBeanDefinition propertyDefinition = new GenericBeanDefinition();
  propertyDefinition.setBeanClass(PropertyPlaceholderConfigurer.class);
  propertyDefinition.getPropertyValues().add("properties", props);

  applicationContext.registerBeanDefinition("propertiesPlaceholder", propertyDefinition);

  testInterfaceScan();
}
RedisRepositoryConfigurationExtension.java 文件源码 项目:spring-data-keyvalue-redis 阅读 35 收藏 0 点赞 0 评论 0
@Override
protected AbstractBeanDefinition getDefaultKeyValueTemplateBeanDefinition(
        RepositoryConfigurationSource configurationSource) {

    RootBeanDefinition redisKeyValueAdapterDefinition = new RootBeanDefinition(RedisKeyValueAdapter.class);

    DirectFieldAccessor dfa = new DirectFieldAccessor(configurationSource);
    AnnotationAttributes aa = (AnnotationAttributes) dfa.getPropertyValue("attributes");

    GenericBeanDefinition indexConfiguration = new GenericBeanDefinition();
    indexConfiguration.setBeanClass(aa.getClass("indexConfiguration"));

    ConstructorArgumentValues constructorArgumentValuesForRedisKeyValueAdapter = new ConstructorArgumentValues();
    constructorArgumentValuesForRedisKeyValueAdapter.addGenericArgumentValue(indexConfiguration);
    redisKeyValueAdapterDefinition.setConstructorArgumentValues(constructorArgumentValuesForRedisKeyValueAdapter);

    RootBeanDefinition keyValueTemplateDefinition = new RootBeanDefinition(KeyValueTemplate.class);
    ConstructorArgumentValues constructorArgumentValuesForKeyValueTemplate = new ConstructorArgumentValues();
    constructorArgumentValuesForKeyValueTemplate.addGenericArgumentValue(redisKeyValueAdapterDefinition);
    keyValueTemplateDefinition.setConstructorArgumentValues(constructorArgumentValuesForKeyValueTemplate);

    return keyValueTemplateDefinition;
}
ConfigurationPropertiesBindingPostProcessorTests.java 文件源码 项目:contestparser 阅读 25 收藏 0 点赞 0 评论 0
@Test
public void configurationPropertiesWithFactoryBean() throws Exception {
    ConfigurationPropertiesWithFactoryBean.factoryBeanInit = false;
    this.context = new AnnotationConfigApplicationContext() {
        @Override
        protected void onRefresh() throws BeansException {
            assertFalse("Init too early",
                    ConfigurationPropertiesWithFactoryBean.factoryBeanInit);
            super.onRefresh();
        }
    };
    this.context.register(ConfigurationPropertiesWithFactoryBean.class);
    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
    beanDefinition.setBeanClass(FactoryBeanTester.class);
    beanDefinition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
    this.context.registerBeanDefinition("test", beanDefinition);
    this.context.refresh();
    assertTrue("No init", ConfigurationPropertiesWithFactoryBean.factoryBeanInit);
}
ClassPathSpringRestClientScanner.java 文件源码 项目:spring-rest-client 阅读 29 收藏 0 点赞 0 评论 0
/**
 * Calls the parent search that will search and register all the candidates.
 * Then the registered objects are post processed to set them as
 * MapperFactoryBeans
 */
@Override
public Set<BeanDefinitionHolder> doScan(String... basePackages) {
    val beanDefinitions = super.doScan(basePackages);

    if (beanDefinitions.isEmpty()) {
        log.warn("No SpringRestClientEnabled was found in '" + Arrays.toString(basePackages) + "' package. Please check your configuration.");
    } else {
        for (val holder : beanDefinitions) {
            val definition = (GenericBeanDefinition) holder.getBeanDefinition();

            if (log.isDebugEnabled()) {
                log.debug("Creating SpringRestClientFactoryBean with name '" + holder.getBeanName()
                        + "' and '" + definition.getBeanClassName() + "' interfaceClazz");
            }

            // the mapper interface is the original class of the bean
            // but, the actual class of the bean is MapperFactoryBean
            definition.getPropertyValues().add("interfaceClazz", definition.getBeanClassName());
            definition.setBeanClass(SpringRestClientFactoryBean.class);
        }
    }

    return beanDefinitions;
}
TestContextOverrideBean.java 文件源码 项目:diqube 阅读 30 收藏 0 点赞 0 评论 0
/**
 * Override a {@link BeanDefinition} in the given context, effectively replacing the bean that will be created.
 * 
 * This has to be called before the context is {@link GenericApplicationContext#refresh()}ed.
 * 
 * @param ctx
 *          The context to work on.
 * @param overriddenBeanClass
 *          Class of the bean that should be overridden.
 * @param newBeanClass
 *          Class of bean that should be used instead.
 */
public static void overrideBeanClass(GenericApplicationContext ctx, Class<?> overriddenBeanClass, Class<?> newBeanClass) {
  String overrideBeanDefName = null;
  for (String beanDefinitionName : ctx.getBeanFactory().getBeanDefinitionNames()) {
    if (ctx.getBeanFactory().getBeanDefinition(beanDefinitionName).getBeanClassName()
        .equals(overriddenBeanClass.getName())) {
      overrideBeanDefName = beanDefinitionName;
      break;
    }
  }

  GenericBeanDefinition overridingBeanDef =
      (GenericBeanDefinition) ((GenericBeanDefinition) ctx.getBeanFactory().getBeanDefinition(overrideBeanDefName))
          .cloneBeanDefinition();
  overridingBeanDef.setBeanClass(newBeanClass);
  ctx.registerBeanDefinition(overrideBeanDefName, overridingBeanDef);
}
ResteasyEmbeddedServletInitializer.java 文件源码 项目:resteasy-spring-boot 阅读 24 收藏 0 点赞 0 评论 0
/**
 * Creates a Servlet bean definition for the given JAX-RS application
 *
 * @param applicationClass
 * @param path
 * @return a Servlet bean definition for the given JAX-RS application
 */
private GenericBeanDefinition createApplicationServlet(Class<? extends Application> applicationClass, String path) {
    GenericBeanDefinition applicationServletBean = new GenericBeanDefinition();
    applicationServletBean.setFactoryBeanName(ResteasyApplicationBuilder.BEAN_NAME);
    applicationServletBean.setFactoryMethodName("build");

    Set<Class<?>> resources = allResources;

    ConstructorArgumentValues values = new ConstructorArgumentValues();
    values.addIndexedArgumentValue(0, applicationClass.getName());
    values.addIndexedArgumentValue(1, path);
    values.addIndexedArgumentValue(2, resources);
    values.addIndexedArgumentValue(3, providers);
    applicationServletBean.setConstructorArgumentValues(values);

    applicationServletBean.setAutowireCandidate(false);
    applicationServletBean.setScope("singleton");

    return applicationServletBean;
}
MapperClassDefinitionScanner.java 文件源码 项目:darks-orm 阅读 23 收藏 0 点赞 0 评论 0
@Override
protected Set<BeanDefinitionHolder> doScan(String... scanPackages)
{
    Set<BeanDefinitionHolder> definitions = super.doScan(scanPackages);
    if (definitions.isEmpty())
    {
        log.warn("No bean definition found in target packages " + Arrays.toString(scanPackages));
    }
    else
    {
        for (BeanDefinitionHolder holder : definitions)
        {
            GenericBeanDefinition definition = (GenericBeanDefinition) holder
                    .getBeanDefinition();
            processBeanDefinition(definition);
        }
    }
    return definitions;
}
MulCommonBaseServiceParser.java 文件源码 项目:zxl 阅读 31 收藏 0 点赞 0 评论 0
private BeanDefinition buildSessionFactoryBeanDefinition(Element element, String name, BeanDefinitionParserDelegate beanDefinitionParserDelegate, BeanDefinitionRegistry beanDefinitionRegistry) {
    AbstractBeanDefinition beanDefinition = new GenericBeanDefinition();
    beanDefinition.setAttribute(ID_ATTRIBUTE, name + SESSION_FACTORY_SUFFIX);
    beanDefinition.setBeanClass(LocalSessionFactoryBean.class);
    beanDefinition.setParentName(SESSION_FACTORY_PARENT_BEAN_NAME);
    MutablePropertyValues propertyValues = new MutablePropertyValues();
    propertyValues.add("dataSource", new RuntimeBeanReference(name + DATA_SOURCE_SUFFIX));
    if (element.hasAttribute(TABLE_PREFIX_NAME) && !StringUtil.isEmpty(element.getAttribute(TABLE_PREFIX_NAME))) {
        AbstractBeanDefinition namingStrategyBeanDefinition = new GenericBeanDefinition();
        String randomBeanName = UUID.randomUUID().toString();
        namingStrategyBeanDefinition.setAttribute(ID_ATTRIBUTE, randomBeanName);
        namingStrategyBeanDefinition.setBeanClass(HibernateNamingStrategy.class);
        MutablePropertyValues mutablePropertyValues = new MutablePropertyValues();
        mutablePropertyValues.add("prefix", element.getAttribute(TABLE_PREFIX_NAME));
        namingStrategyBeanDefinition.setPropertyValues(mutablePropertyValues);
        beanDefinitionRegistry.registerBeanDefinition(randomBeanName, namingStrategyBeanDefinition);
        propertyValues.addPropertyValue("namingStrategy", new RuntimeBeanReference(randomBeanName));
    }
    beanDefinition.setPropertyValues(propertyValues);
    beanDefinitionParserDelegate.parsePropertyElements(element, beanDefinition);
    return beanDefinition;
}
SettingBackedBeanFactoryPostProcessor.java 文件源码 项目:spring-boot-capgemini 阅读 23 收藏 0 点赞 0 评论 0
private BeanDefinition createBeanDefinition(Object settings, Object setting, String factoryBeanName, Method factoryMethod) {
    final GenericBeanDefinition definition = new GenericBeanDefinition();
    definition.setFactoryBeanName(factoryBeanName);
    definition.setFactoryMethodName(factoryMethod.getName());

    //Create method arguments (confusingly called constructor arguments in spring)
    final ConstructorArgumentValues arguments = new ConstructorArgumentValues();
    arguments.addIndexedArgumentValue(0, setting);

    final int parameterCount = factoryMethod.getParameterTypes().length;
    if (parameterCount == 2) {
        arguments.addIndexedArgumentValue(1, settings);
    } else if (parameterCount > 2) {
        throw getExceptionFactory().createInvalidArgumentsException(factoryMethod);
    }

    //TODO more checking of method arguments to ensure they're correct

    definition.setConstructorArgumentValues(arguments);

    return definition;
}
MapperScanTest.java 文件源码 项目:mybatis-spring 阅读 28 收藏 0 点赞 0 评论 0
@Test
public void testScanWithExplicitSqlSessionTemplate() throws Exception {
  GenericBeanDefinition definition = new GenericBeanDefinition();
  definition.setBeanClass(SqlSessionTemplate.class);
  ConstructorArgumentValues constructorArgs = new ConstructorArgumentValues();
  constructorArgs.addGenericArgumentValue(new RuntimeBeanReference("sqlSessionFactory"));
  definition.setConstructorArgumentValues(constructorArgs);
  applicationContext.registerBeanDefinition("sqlSessionTemplate", definition);

  applicationContext.register(AppConfigWithSqlSessionTemplate.class);

  startContext();

  // all interfaces with methods should be loaded
  applicationContext.getBean("mapperInterface");
  applicationContext.getBean("mapperSubinterface");
  applicationContext.getBean("mapperChildInterface");
  applicationContext.getBean("annotatedMapper");

}


问题


面经


文章

微信
公众号

扫码关注公众号