org.springframework.beans.factory.support.RootBeanDefinition#setConstructorArgumentValues ( )源码实例Demo

下面列出了org.springframework.beans.factory.support.RootBeanDefinition#setConstructorArgumentValues ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Override
protected AbstractBeanDefinition getDefaultKeyValueTemplateBeanDefinition(
		RepositoryConfigurationSource configurationSource) {

	RootBeanDefinition keyValueTemplateDefinition = new RootBeanDefinition(VaultKeyValueTemplate.class);

	ConstructorArgumentValues constructorArgumentValuesForKeyValueTemplate = new ConstructorArgumentValues();
	constructorArgumentValuesForKeyValueTemplate.addIndexedArgumentValue(0,
			new RuntimeBeanReference(VAULT_ADAPTER_BEAN_NAME));

	constructorArgumentValuesForKeyValueTemplate.addIndexedArgumentValue(1,
			new RuntimeBeanReference(VAULT_MAPPING_CONTEXT_BEAN_NAME));

	keyValueTemplateDefinition.setConstructorArgumentValues(constructorArgumentValuesForKeyValueTemplate);

	return keyValueTemplateDefinition;
}
 
/**
 * Will transform all discovered Kotlin's Function lambdas to java
 * Supplier, Function and Consumer, retaining the original Kotlin type
 * characteristics.
 *
 * @return the bean factory post processor
 */
@Bean
public BeanFactoryPostProcessor kotlinToFunctionTransformer() {
	return new BeanFactoryPostProcessor() {

		@Override
		public void postProcessBeanFactory(
				ConfigurableListableBeanFactory beanFactory) throws BeansException {

			String[] beanDefinitionNames = beanFactory.getBeanDefinitionNames();
			for (String beanDefinitionName : beanDefinitionNames) {
				BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanDefinitionName);

				ResolvableType rt = beanDefinition.getResolvableType();
				if (rt.getType().getTypeName().startsWith("kotlin.jvm.functions.Function")) {
					RootBeanDefinition cbd = new RootBeanDefinition(KotlinFunctionWrapper.class);
					ConstructorArgumentValues ca = new ConstructorArgumentValues();
					ca.addGenericArgumentValue(beanDefinition);
					cbd.setConstructorArgumentValues(ca);
					((BeanDefinitionRegistry) beanFactory).registerBeanDefinition(beanDefinitionName + FunctionRegistration.REGISTRATION_NAME_SUFFIX, cbd);
				}
			}
		}
	};
}
 
private void registerByteCodeLoadingProxy(String name, String type, Resource resource,
		DefaultListableBeanFactory beanFactory) {
	Class<?> proxyClass = null;
	if ("supplier".equals(type.toLowerCase())) {
		proxyClass = ByteCodeLoadingSupplier.class;
	}
	else if ("consumer".equals(type.toLowerCase())) {
		proxyClass = ByteCodeLoadingConsumer.class;
	}
	else {
		proxyClass = ByteCodeLoadingFunction.class;
	}
	RootBeanDefinition beanDefinition = new RootBeanDefinition(proxyClass);
	ConstructorArgumentValues args = new ConstructorArgumentValues();
	args.addGenericArgumentValue(resource);
	beanDefinition.setConstructorArgumentValues(args);
	beanFactory.registerBeanDefinition(name, beanDefinition);
}
 
private void parseResourceCache(ManagedList<Object> resourceResolvers,
		ManagedList<Object> resourceTransformers, Element element, @Nullable Object source) {

	String resourceCache = element.getAttribute("resource-cache");
	if ("true".equals(resourceCache)) {
		ConstructorArgumentValues cargs = new ConstructorArgumentValues();

		RootBeanDefinition cachingResolverDef = new RootBeanDefinition(CachingResourceResolver.class);
		cachingResolverDef.setSource(source);
		cachingResolverDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
		cachingResolverDef.setConstructorArgumentValues(cargs);

		RootBeanDefinition cachingTransformerDef = new RootBeanDefinition(CachingResourceTransformer.class);
		cachingTransformerDef.setSource(source);
		cachingTransformerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
		cachingTransformerDef.setConstructorArgumentValues(cargs);

		String cacheManagerName = element.getAttribute("cache-manager");
		String cacheName = element.getAttribute("cache-name");
		if (StringUtils.hasText(cacheManagerName) && StringUtils.hasText(cacheName)) {
			RuntimeBeanReference cacheManagerRef = new RuntimeBeanReference(cacheManagerName);
			cargs.addIndexedArgumentValue(0, cacheManagerRef);
			cargs.addIndexedArgumentValue(1, cacheName);
		}
		else {
			ConstructorArgumentValues cacheCavs = new ConstructorArgumentValues();
			cacheCavs.addIndexedArgumentValue(0, RESOURCE_CHAIN_CACHE);
			RootBeanDefinition cacheDef = new RootBeanDefinition(ConcurrentMapCache.class);
			cacheDef.setSource(source);
			cacheDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
			cacheDef.setConstructorArgumentValues(cacheCavs);
			cargs.addIndexedArgumentValue(0, cacheDef);
		}
		resourceResolvers.add(cachingResolverDef);
		resourceTransformers.add(cachingTransformerDef);
	}
}
 
源代码5 项目: spring-analysis-note   文件: Spr5475Tests.java
@Test
public void noArgFactoryMethodInvokedWithTwoArgsAndTypesSpecified() {
	RootBeanDefinition def = new RootBeanDefinition(Foo.class);
	def.setFactoryMethodName("noArgFactory");
	ConstructorArgumentValues cav = new ConstructorArgumentValues();
	cav.addIndexedArgumentValue(0, "bogusArg1", CharSequence.class.getName());
	cav.addIndexedArgumentValue(1, "bogusArg2".getBytes());
	def.setConstructorArgumentValues(cav);

	assertExceptionMessageForMisconfiguredFactoryMethod(def,
			"Error creating bean with name 'foo': No matching factory method found: factory method 'noArgFactory(CharSequence,byte[])'. " +
			"Check that a method with the specified name and arguments exists and that it is static.");
}
 
private void parseResourceCache(ManagedList<Object> resourceResolvers,
		ManagedList<Object> resourceTransformers, Element element, @Nullable Object source) {

	String resourceCache = element.getAttribute("resource-cache");
	if ("true".equals(resourceCache)) {
		ConstructorArgumentValues cargs = new ConstructorArgumentValues();

		RootBeanDefinition cachingResolverDef = new RootBeanDefinition(CachingResourceResolver.class);
		cachingResolverDef.setSource(source);
		cachingResolverDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
		cachingResolverDef.setConstructorArgumentValues(cargs);

		RootBeanDefinition cachingTransformerDef = new RootBeanDefinition(CachingResourceTransformer.class);
		cachingTransformerDef.setSource(source);
		cachingTransformerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
		cachingTransformerDef.setConstructorArgumentValues(cargs);

		String cacheManagerName = element.getAttribute("cache-manager");
		String cacheName = element.getAttribute("cache-name");
		if (StringUtils.hasText(cacheManagerName) && StringUtils.hasText(cacheName)) {
			RuntimeBeanReference cacheManagerRef = new RuntimeBeanReference(cacheManagerName);
			cargs.addIndexedArgumentValue(0, cacheManagerRef);
			cargs.addIndexedArgumentValue(1, cacheName);
		}
		else {
			ConstructorArgumentValues cacheCavs = new ConstructorArgumentValues();
			cacheCavs.addIndexedArgumentValue(0, RESOURCE_CHAIN_CACHE);
			RootBeanDefinition cacheDef = new RootBeanDefinition(ConcurrentMapCache.class);
			cacheDef.setSource(source);
			cacheDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
			cacheDef.setConstructorArgumentValues(cacheCavs);
			cargs.addIndexedArgumentValue(0, cacheDef);
		}
		resourceResolvers.add(cachingResolverDef);
		resourceTransformers.add(cachingTransformerDef);
	}
}
 
源代码7 项目: java-technology-stack   文件: Spr5475Tests.java
@Test
public void noArgFactoryMethodInvokedWithTwoArgsAndTypesSpecified() {
	RootBeanDefinition def = new RootBeanDefinition(Foo.class);
	def.setFactoryMethodName("noArgFactory");
	ConstructorArgumentValues cav = new ConstructorArgumentValues();
	cav.addIndexedArgumentValue(0, "bogusArg1", CharSequence.class.getName());
	cav.addIndexedArgumentValue(1, "bogusArg2".getBytes());
	def.setConstructorArgumentValues(cav);

	assertExceptionMessageForMisconfiguredFactoryMethod(def,
			"Error creating bean with name 'foo': No matching factory method found: factory method 'noArgFactory(CharSequence,byte[])'. " +
			"Check that a method with the specified name and arguments exists and that it is static.");
}
 
源代码8 项目: lams   文件: ResourcesBeanDefinitionParser.java
private void parseResourceCache(ManagedList<? super Object> resourceResolvers,
		ManagedList<? super Object> resourceTransformers, Element element, Object source) {

	String resourceCache = element.getAttribute("resource-cache");
	if ("true".equals(resourceCache)) {
		ConstructorArgumentValues cavs = new ConstructorArgumentValues();

		RootBeanDefinition cachingResolverDef = new RootBeanDefinition(CachingResourceResolver.class);
		cachingResolverDef.setSource(source);
		cachingResolverDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
		cachingResolverDef.setConstructorArgumentValues(cavs);

		RootBeanDefinition cachingTransformerDef = new RootBeanDefinition(CachingResourceTransformer.class);
		cachingTransformerDef.setSource(source);
		cachingTransformerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
		cachingTransformerDef.setConstructorArgumentValues(cavs);

		String cacheManagerName = element.getAttribute("cache-manager");
		String cacheName = element.getAttribute("cache-name");
		if (StringUtils.hasText(cacheManagerName) && StringUtils.hasText(cacheName)) {
			RuntimeBeanReference cacheManagerRef = new RuntimeBeanReference(cacheManagerName);
			cavs.addIndexedArgumentValue(0, cacheManagerRef);
			cavs.addIndexedArgumentValue(1, cacheName);
		}
		else {
			ConstructorArgumentValues cacheCavs = new ConstructorArgumentValues();
			cacheCavs.addIndexedArgumentValue(0, RESOURCE_CHAIN_CACHE);
			RootBeanDefinition cacheDef = new RootBeanDefinition(ConcurrentMapCache.class);
			cacheDef.setSource(source);
			cacheDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
			cacheDef.setConstructorArgumentValues(cacheCavs);
			cavs.addIndexedArgumentValue(0, cacheDef);
		}
		resourceResolvers.add(cachingResolverDef);
		resourceTransformers.add(cachingTransformerDef);
	}
}
 
private void parseResourceCache(ManagedList<? super Object> resourceResolvers,
		ManagedList<? super Object> resourceTransformers, Element element, Object source) {

	String resourceCache = element.getAttribute("resource-cache");
	if ("true".equals(resourceCache)) {
		ConstructorArgumentValues cavs = new ConstructorArgumentValues();

		RootBeanDefinition cachingResolverDef = new RootBeanDefinition(CachingResourceResolver.class);
		cachingResolverDef.setSource(source);
		cachingResolverDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
		cachingResolverDef.setConstructorArgumentValues(cavs);

		RootBeanDefinition cachingTransformerDef = new RootBeanDefinition(CachingResourceTransformer.class);
		cachingTransformerDef.setSource(source);
		cachingTransformerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
		cachingTransformerDef.setConstructorArgumentValues(cavs);

		String cacheManagerName = element.getAttribute("cache-manager");
		String cacheName = element.getAttribute("cache-name");
		if (StringUtils.hasText(cacheManagerName) && StringUtils.hasText(cacheName)) {
			RuntimeBeanReference cacheManagerRef = new RuntimeBeanReference(cacheManagerName);
			cavs.addIndexedArgumentValue(0, cacheManagerRef);
			cavs.addIndexedArgumentValue(1, cacheName);
		}
		else {
			ConstructorArgumentValues cacheCavs = new ConstructorArgumentValues();
			cacheCavs.addIndexedArgumentValue(0, RESOURCE_CHAIN_CACHE);
			RootBeanDefinition cacheDef = new RootBeanDefinition(ConcurrentMapCache.class);
			cacheDef.setSource(source);
			cacheDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
			cacheDef.setConstructorArgumentValues(cacheCavs);
			cavs.addIndexedArgumentValue(0, cacheDef);
		}
		resourceResolvers.add(cachingResolverDef);
		resourceTransformers.add(cachingTransformerDef);
	}
}
 
源代码10 项目: spring4-understanding   文件: Spr5475Tests.java
@Test
public void noArgFactoryMethodInvokedWithTwoArgsAndTypesSpecified() {
	RootBeanDefinition def = new RootBeanDefinition(Foo.class);
	def.setFactoryMethodName("noArgFactory");
	ConstructorArgumentValues cav = new ConstructorArgumentValues();
	cav.addIndexedArgumentValue(0, "bogusArg1", CharSequence.class.getName());
	cav.addIndexedArgumentValue(1, "bogusArg2".getBytes());
	def.setConstructorArgumentValues(cav);

	assertExceptionMessageForMisconfiguredFactoryMethod(
			def,
			"Error creating bean with name 'foo': No matching factory method found: factory method 'noArgFactory(CharSequence,byte[])'. " +
			"Check that a method with the specified name and arguments exists and that it is static.");
}
 
private void registerLambdaCompilingProxy(String name, String type, String inputType,
		String outputType, String lambda, DefaultListableBeanFactory beanFactory) {
	Resource resource = new ByteArrayResource(lambda.getBytes());
	ConstructorArgumentValues args = new ConstructorArgumentValues();
	MutablePropertyValues props = new MutablePropertyValues();
	args.addGenericArgumentValue(resource);
	Class<?> proxyClass = null;
	if ("supplier".equals(type.toLowerCase())) {
		proxyClass = LambdaCompilingSupplier.class;
		args.addGenericArgumentValue(this.supplierCompiler);
		if (outputType != null) {
			props.add("typeParameterizations", outputType);
		}
	}
	else if ("consumer".equals(type.toLowerCase())) {
		proxyClass = LambdaCompilingConsumer.class;
		args.addGenericArgumentValue(this.consumerCompiler);
		if (inputType != null) {
			props.add("typeParameterizations", inputType);
		}
	}
	else {
		proxyClass = LambdaCompilingFunction.class;
		args.addGenericArgumentValue(this.functionCompiler);
		if ((inputType == null && outputType != null)
				|| (outputType == null && inputType != null)) {
			throw new IllegalArgumentException(
					"if either input or output type is set, the other is also required");
		}
		if (inputType != null) {
			props.add("typeParameterizations",
					new String[] { inputType, outputType });
		}
	}
	RootBeanDefinition beanDefinition = new RootBeanDefinition(proxyClass);
	beanDefinition.setConstructorArgumentValues(args);
	beanDefinition.setPropertyValues(props);
	beanFactory.registerBeanDefinition(name, beanDefinition);
}
 
@Override
public void registerBeansForRoot(BeanDefinitionRegistry registry, RepositoryConfigurationSource configurationSource) {
    // register HazelcastKeyValueAdapter
    String hazelcastInstanceRef = configurationSource.getAttribute("hazelcastInstanceRef").get();

    RootBeanDefinition hazelcastKeyValueAdapterDefinition = new RootBeanDefinition(HazelcastKeyValueAdapter.class);
    ConstructorArgumentValues constructorArgumentValuesForHazelcastKeyValueAdapter = new ConstructorArgumentValues();
    constructorArgumentValuesForHazelcastKeyValueAdapter
            .addIndexedArgumentValue(0, new RuntimeBeanReference(hazelcastInstanceRef));
    hazelcastKeyValueAdapterDefinition.setConstructorArgumentValues(constructorArgumentValuesForHazelcastKeyValueAdapter);
    registerIfNotAlreadyRegistered(() -> hazelcastKeyValueAdapterDefinition, registry, HAZELCAST_ADAPTER_BEAN_NAME,
            configurationSource);

    super.registerBeansForRoot(registry, configurationSource);
}
 
@Override
protected AbstractBeanDefinition getDefaultKeyValueTemplateBeanDefinition(RepositoryConfigurationSource configurationSource) {
    RootBeanDefinition keyValueTemplateDefinition = new RootBeanDefinition(KeyValueTemplate.class);
    ConstructorArgumentValues constructorArgumentValuesForKeyValueTemplate = new ConstructorArgumentValues();
    constructorArgumentValuesForKeyValueTemplate
            .addIndexedArgumentValue(0, new RuntimeBeanReference(HAZELCAST_ADAPTER_BEAN_NAME));
    constructorArgumentValuesForKeyValueTemplate
            .addIndexedArgumentValue(1, new RuntimeBeanReference(MAPPING_CONTEXT_BEAN_NAME));

    keyValueTemplateDefinition.setConstructorArgumentValues(constructorArgumentValuesForKeyValueTemplate);

    return keyValueTemplateDefinition;
}
 
@Override
public void registerBeansForRoot(BeanDefinitionRegistry registry,
		RepositoryConfigurationSource configurationSource) {

	Optional<String> vaultTemplateRef = configurationSource.getAttribute("vaultTemplateRef");

	RootBeanDefinition mappingContextDefinition = createVaultMappingContext(configurationSource);
	mappingContextDefinition.setSource(configurationSource.getSource());

	registerIfNotAlreadyRegistered(() -> mappingContextDefinition, registry, VAULT_MAPPING_CONTEXT_BEAN_NAME,
			configurationSource);

	// register Adapter
	RootBeanDefinition vaultKeyValueAdapterDefinition = new RootBeanDefinition(VaultKeyValueAdapter.class);

	ConstructorArgumentValues constructorArgumentValuesForVaultKeyValueAdapter = new ConstructorArgumentValues();

	constructorArgumentValuesForVaultKeyValueAdapter.addIndexedArgumentValue(0,
			new RuntimeBeanReference(vaultTemplateRef.orElse("vaultTemplate")));

	vaultKeyValueAdapterDefinition.setConstructorArgumentValues(constructorArgumentValuesForVaultKeyValueAdapter);

	registerIfNotAlreadyRegistered(() -> vaultKeyValueAdapterDefinition, registry, VAULT_ADAPTER_BEAN_NAME,
			configurationSource);

	Optional<String> keyValueTemplateName = configurationSource.getAttribute(KEY_VALUE_TEMPLATE_BEAN_REF_ATTRIBUTE);

	// No custom template reference configured and no matching bean definition found
	if (keyValueTemplateName.isPresent() && getDefaultKeyValueTemplateRef().equals(keyValueTemplateName.get())
			&& !registry.containsBeanDefinition(keyValueTemplateName.get())) {

		registerIfNotAlreadyRegistered(() -> getDefaultKeyValueTemplateBeanDefinition(configurationSource),
				registry, keyValueTemplateName.get(), configurationSource.getSource());
	}

	super.registerBeansForRoot(registry, configurationSource);
}
 
private RootBeanDefinition createVaultMappingContext(RepositoryConfigurationSource configurationSource) {

		ConstructorArgumentValues mappingContextArgs = new ConstructorArgumentValues();

		RootBeanDefinition mappingContextBeanDef = new RootBeanDefinition(VaultMappingContext.class);
		mappingContextBeanDef.setConstructorArgumentValues(mappingContextArgs);
		mappingContextBeanDef.setSource(configurationSource.getSource());

		return mappingContextBeanDef;
	}