org.springframework.beans.factory.config.BeanDefinition.isPrimary()方法的使用及代码示例

x33g5p2x  于2022-01-16 转载在 其他  
字(14.0k)|赞(0)|评价(0)|浏览(108)

本文整理了Java中org.springframework.beans.factory.config.BeanDefinition.isPrimary()方法的一些代码示例,展示了BeanDefinition.isPrimary()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。BeanDefinition.isPrimary()方法的具体详情如下:
包路径:org.springframework.beans.factory.config.BeanDefinition
类名称:BeanDefinition
方法名:isPrimary

BeanDefinition.isPrimary介绍

[英]Return whether this bean is a primary autowire candidate.
[中]返回此bean是否为主要autowire候选。

代码示例

代码示例来源:origin: AxonFramework/AxonFramework

private <T> Optional<String> findComponent(Class<T> componentType) {
  String[] beans = beanFactory.getBeanNamesForType(componentType);
  if (beans.length == 1) {
    return Optional.of(beans[0]);
  } else if (beans.length > 1) {
    for (String bean : beans) {
      BeanDefinition beanDef = beanFactory.getBeanDefinition(bean);
      if (beanDef.isPrimary()) {
        return Optional.of(bean);
      }
    }
    logger.warn("Multiple beans of type {} found in application context: {}. Chose {}",
          componentType.getSimpleName(), beans, beans[0]);
    return Optional.of(beans[0]);
  }
  return Optional.empty();
}

代码示例来源:origin: AxonFramework/AxonFramework

private Optional<ParameterResolver> findQualifiedBean(Map<String, ?> beansFound, ConfigurableListableBeanFactory clBeanFactory, Parameter[] parameters, int parameterIndex) {
  final Parameter parameter = parameters[parameterIndex];
  // find @Qualifier matching candidate
  final Optional<Map<String, Object>> qualifier = AnnotationUtils.findAnnotationAttributes(parameter, Qualifier.class);
  if (qualifier.isPresent()) {
    for (Map.Entry<String, ?> bean : beansFound.entrySet()) {
      if (SpringUtils.isQualifierMatch(bean.getKey(), clBeanFactory, (String) qualifier.get().get("qualifier"))) {
        return Optional.of(new SpringBeanParameterResolver(clBeanFactory, bean.getKey()));
      }
    }
  }
  // find @Primary matching candidate
  for (Map.Entry<String, ?> bean : beansFound.entrySet()) {
    if (clBeanFactory.containsBeanDefinition(bean.getKey())
        && clBeanFactory.getBeanDefinition(bean.getKey()).isPrimary()) {
      return Optional.of(new SpringBeanParameterResolver(clBeanFactory, bean.getKey()));
    }
  }
  return Optional.empty();
}

代码示例来源:origin: spockframework/spock

private String determinePrimaryCandidate(BeanDefinitionRegistry registry,
                     String[] candidateBeanNames, ResolvableType type) {
 String primaryBeanName = null;
 for (String candidateBeanName : candidateBeanNames) {
  BeanDefinition beanDefinition = registry.getBeanDefinition(candidateBeanName);
  if (beanDefinition.isPrimary()) {
   if (primaryBeanName != null) {
    throw new NoUniqueBeanDefinitionException(type.resolve(),
     candidateBeanNames.length,
     "more than one 'primary' bean found among candidates: "
      + asList(candidateBeanNames));
   }
   primaryBeanName = candidateBeanName;
  }
 }
 return primaryBeanName;
}

代码示例来源:origin: spring-projects/spring-security

@SuppressWarnings("unchecked")
private <T> T lazyBean(Class<T> interfaceName) {
  LazyInitTargetSource lazyTargetSource = new LazyInitTargetSource();
  String[] beanNamesForType = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(
      applicationContext, interfaceName);
  if (beanNamesForType.length == 0) {
    return null;
  }
  String beanName;
  if (beanNamesForType.length > 1) {
    List<String> primaryBeanNames = Arrays.stream(beanNamesForType)
      .filter(i -> applicationContext instanceof ConfigurableApplicationContext)
      .filter(n -> ((ConfigurableApplicationContext) applicationContext).getBeanFactory().getBeanDefinition(n).isPrimary())
      .collect(Collectors.toList());
    Assert.isTrue(primaryBeanNames.size() != 0, () -> "Found " + beanNamesForType.length
        + " beans for type " + interfaceName + ", but none marked as primary");
    Assert.isTrue(primaryBeanNames.size() == 1, () -> "Found " + primaryBeanNames.size()
        + " beans for type " + interfaceName + " marked as primary");
    beanName = primaryBeanNames.get(0);
  } else {
    beanName = beanNamesForType[0];
  }
  lazyTargetSource.setTargetBeanName(beanName);
  lazyTargetSource.setBeanFactory(applicationContext);
  ProxyFactoryBean proxyFactory = new ProxyFactoryBean();
  proxyFactory = objectPostProcessor.postProcess(proxyFactory);
  proxyFactory.setTargetSource(lazyTargetSource);
  return (T) proxyFactory.getObject();
}

代码示例来源:origin: spring-projects/spring-framework

proxyDefinition.setPrimary(targetDefinition.isPrimary());
if (targetDefinition instanceof AbstractBeanDefinition) {
  proxyDefinition.copyQualifiersFrom((AbstractBeanDefinition) targetDefinition);

代码示例来源:origin: spring-projects/spring-framework

proxyDefinition.setPrimary(targetDefinition.isPrimary());
if (targetDefinition instanceof AbstractBeanDefinition) {
  proxyDefinition.copyQualifiersFrom((AbstractBeanDefinition) targetDefinition);

代码示例来源:origin: spring-projects/spring-data-jdbc

private static List<String> getPrimaryBeanDefinitions(List<String> beanNames,
    ConfigurableListableBeanFactory beanFactory) {
  ArrayList<String> primaryBeanNames = new ArrayList<>();
  for (String name : beanNames) {
    if (beanFactory.getBeanDefinition(name).isPrimary()) {
      primaryBeanNames.add(name);
    }
  }
  return primaryBeanNames;
}

代码示例来源:origin: stackoverflow.com

ConfigurableListableBeanFactory clbf =
   (ConfigurableListableBeanFactory)beanFactory;
String[] beanNames = clbf.getBeanNamesForType(myType);
for (String beanName : beanNames) {
  BeanDefinition bd = clbf.getBeanDefinition(beanName);
  if (bd.isPrimary()) {
   ...
  }
}

代码示例来源:origin: com.foreach.across/across-core

private Optional<String> moduleNameForBeanFactory() {
  return beanFactory.getBeansOfType( AcrossModule.class )
           .keySet().stream()
           .filter( beanName -> beanFactory.getBeanDefinition( beanName ).isPrimary() )
           .findFirst();
}

代码示例来源:origin: org.springframework.boot/spring-boot-test

private void copyBeanDefinitionDetails(BeanDefinition from, RootBeanDefinition to) {
  to.setPrimary(from.isPrimary());
}

代码示例来源:origin: org.beangle.ioc/beangle-ioc-spring

public boolean isPrimary(String name) {
 return definitionRegistry.getBeanDefinition(name).isPrimary();
}

代码示例来源:origin: org.springframework.boot/spring-boot-test-autoconfigure

private BeanDefinitionHolder getDataSourceBeanDefinition(
    ConfigurableListableBeanFactory beanFactory) {
  String[] beanNames = beanFactory.getBeanNamesForType(DataSource.class);
  if (ObjectUtils.isEmpty(beanNames)) {
    logger.warn("No DataSource beans found, "
        + "embedded version will not be used");
    return null;
  }
  if (beanNames.length == 1) {
    String beanName = beanNames[0];
    BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
    return new BeanDefinitionHolder(beanDefinition, beanName);
  }
  for (String beanName : beanNames) {
    BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
    if (beanDefinition.isPrimary()) {
      return new BeanDefinitionHolder(beanDefinition, beanName);
    }
  }
  logger.warn("No primary DataSource found, "
      + "embedded version will not be used");
  return null;
}

代码示例来源:origin: org.springframework.boot/spring-boot-test

private String determinePrimaryCandidate(BeanDefinitionRegistry registry,
    Collection<String> candidateBeanNames, ResolvableType type) {
  String primaryBeanName = null;
  for (String candidateBeanName : candidateBeanNames) {
    BeanDefinition beanDefinition = registry.getBeanDefinition(candidateBeanName);
    if (beanDefinition.isPrimary()) {
      if (primaryBeanName != null) {
        throw new NoUniqueBeanDefinitionException(type.resolve(),
            candidateBeanNames.size(),
            "more than one 'primary' bean found among candidates: "
                + Arrays.asList(candidateBeanNames));
      }
      primaryBeanName = candidateBeanName;
    }
  }
  return primaryBeanName;
}

代码示例来源:origin: org.springframework.boot/spring-boot-test-autoconfigure

private void process(BeanDefinitionRegistry registry,
    ConfigurableListableBeanFactory beanFactory) {
  BeanDefinitionHolder holder = getDataSourceBeanDefinition(beanFactory);
  if (holder != null) {
    String beanName = holder.getBeanName();
    boolean primary = holder.getBeanDefinition().isPrimary();
    logger.info("Replacing '" + beanName + "' DataSource bean with "
        + (primary ? "primary " : "") + "embedded version");
    registry.removeBeanDefinition(beanName);
    registry.registerBeanDefinition(beanName,
        createEmbeddedBeanDefinition(primary));
  }
}

代码示例来源:origin: org.springframework.boot/spring-boot-test

private boolean isPrimary(String name, Scope scope) {
  ApplicationContext context = getApplicationContext();
  while (context != null) {
    if (context instanceof ConfigurableApplicationContext) {
      ConfigurableListableBeanFactory factory = ((ConfigurableApplicationContext) context)
          .getBeanFactory();
      if (factory.containsBean(name)
          && factory.getMergedBeanDefinition(name).isPrimary()) {
        return true;
      }
    }
    context = (scope != Scope.NO_ANCESTORS) ? context.getParent() : null;
  }
  return false;
}

代码示例来源:origin: zonkyio/embedded-database-spring-test

protected static BeanDefinitionHolder getFlywayBeanDefinition(ConfigurableListableBeanFactory beanFactory, FlywayTest[] annotations) {
  if (annotations.length > 1) {
    return null; // optimized loading is not supported yet when using multiple flyway test annotations
  }
  String flywayBeanName = resolveFlywayBeanName(annotations);
  if (StringUtils.isNotBlank(flywayBeanName)) {
    BeanDefinition beanDefinition = beanFactory.getBeanDefinition(flywayBeanName);
    return new BeanDefinitionHolder(beanDefinition, flywayBeanName);
  }
  String[] beanNames = beanFactory.getBeanNamesForType(Flyway.class);
  if (ObjectUtils.isEmpty(beanNames)) {
    return null;
  }
  if (beanNames.length == 1) {
    String beanName = beanNames[0];
    BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
    return new BeanDefinitionHolder(beanDefinition, beanName);
  }
  for (String beanName : beanNames) {
    BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
    if (beanDefinition.isPrimary()) {
      return new BeanDefinitionHolder(beanDefinition, beanName);
    }
  }
  return null;
}

代码示例来源:origin: zonkyio/embedded-database-spring-test

protected static BeanDefinitionHolder getDataSourceBeanDefinition(ConfigurableListableBeanFactory beanFactory, AutoConfigureEmbeddedDatabase annotation) {
  if (StringUtils.isNotBlank(annotation.beanName())) {
    if (beanFactory.containsBean(annotation.beanName())) {
      BeanDefinition beanDefinition = beanFactory.getBeanDefinition(annotation.beanName());
      return new BeanDefinitionHolder(beanDefinition, annotation.beanName());
    } else {
      return new BeanDefinitionHolder(new RootBeanDefinition(), annotation.beanName());
    }
  }
  String[] beanNames = beanFactory.getBeanNamesForType(DataSource.class);
  if (ObjectUtils.isEmpty(beanNames)) {
    throw new IllegalStateException("No DataSource beans found, embedded version will not be used, " +
        "you must specify data source name - use @AutoConfigureEmbeddedDatabase(beanName = \"dataSource\") annotation");
  }
  if (beanNames.length == 1) {
    String beanName = beanNames[0];
    BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
    return new BeanDefinitionHolder(beanDefinition, beanName);
  }
  for (String beanName : beanNames) {
    BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
    if (beanDefinition.isPrimary()) {
      return new BeanDefinitionHolder(beanDefinition, beanName);
    }
  }
  throw new IllegalStateException("No primary DataSource found, embedded version will not be used");
}

代码示例来源:origin: com.foreach.across/across-core

private void registerPrimaryDataSource( DataSource expected, AcrossListableBeanFactory beanFactory, boolean hasInstallerDataSource ) {
  BeanDefinitionRegistry registry = getRegistryWithLocalBeanDefinition( beanFactory, DATASOURCE );
  if ( registry != null ) {
    BeanDefinition beanDefinition = registry.getBeanDefinition( DATASOURCE );
    boolean multipleDataSources = hasMultipleDataSources( beanFactory ) || hasInstallerDataSource;
    if ( multipleDataSources && !beanDefinition.isPrimary() ) {
      registerPrimaryDataSourceBeanDefinition( beanFactory, expected );
    }
  }
  else if ( expected != null ) {
    registerPrimaryDataSourceBeanDefinition( beanFactory, expected );
  }
}

代码示例来源:origin: alipay/sofa-tracer

private void createDataSourceProxy(ConfigurableListableBeanFactory beanFactory,
                  String beanName, BeanDefinition originDataSource,
                  String jdbcUrl) {
  // re-register origin datasource bean
  BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry) beanFactory;
  beanDefinitionRegistry.removeBeanDefinition(beanName);
  boolean isPrimary = originDataSource.isPrimary();
  originDataSource.setPrimary(false);
  beanDefinitionRegistry.registerBeanDefinition(transformDatasourceBeanName(beanName),
    originDataSource);
  // register proxied datasource
  RootBeanDefinition proxiedBeanDefinition = new RootBeanDefinition(SmartDataSource.class);
  proxiedBeanDefinition.setRole(BeanDefinition.ROLE_APPLICATION);
  proxiedBeanDefinition.setPrimary(isPrimary);
  proxiedBeanDefinition.setInitMethodName("init");
  proxiedBeanDefinition.setDependsOn(transformDatasourceBeanName(beanName));
  MutablePropertyValues originValues = originDataSource.getPropertyValues();
  MutablePropertyValues values = new MutablePropertyValues();
  String appName = environment.getProperty(TRACER_APPNAME_KEY);
  Assert.isTrue(!StringUtils.isBlank(appName), TRACER_APPNAME_KEY + " must be configured!");
  values.add("appName", appName);
  values.add("delegate", new RuntimeBeanReference(transformDatasourceBeanName(beanName)));
  values.add("dbType",
    DataSourceUtils.resolveDbTypeFromUrl(unwrapPropertyValue(originValues.get(jdbcUrl))));
  values.add("database",
    DataSourceUtils.resolveDatabaseFromUrl(unwrapPropertyValue(originValues.get(jdbcUrl))));
  proxiedBeanDefinition.setPropertyValues(values);
  beanDefinitionRegistry.registerBeanDefinition(beanName, proxiedBeanDefinition);
}

代码示例来源:origin: org.testifyproject.di/di-spring

@Override
public void postProcessBeanFactory(
    ConfigurableListableBeanFactory configurableListableBeanFactory) {
  DefaultListableBeanFactory beanFactory =
      (DefaultListableBeanFactory) configurableListableBeanFactory;
  Queue<Instance<?>> instances = getInstances(testContext);
  removeInstances(instances, beanFactory);
  addInstances(instances, beanFactory);
  for (String beanName : beanFactory.getBeanDefinitionNames()) {
    BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
    //mark all beans as lazy beans so we don't needlessly
    //instianticate them during testing
    beanDefinition.setLazyInit(true);
    Class<?> beanType = beanFactory.getType(beanName);
    if (beanDefinition.isPrimary()) {
      processPrimary(beanFactory, beanDefinition, beanName, beanType);
    }
    //by default spring eagerly initilizes singleton scoped beans such as
    //controllers so lets insure that controller entry points are prototype
    //scoped and thus make them lazy.
    boolean isController = isController(beanType);
    if (isController) {
      beanDefinition.setScope(SCOPE_PROTOTYPE);
    }
  }
  beanFactory.addBeanPostProcessor(new SpringReifierPostProcessor(testContext));
}

相关文章

微信公众号

最新文章

更多