From a8b747c21c20f87a05933cf0d300136330da52ec Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 4 Jul 2018 22:55:38 +0200 Subject: [PATCH] Polishing --- .../factory/BeanDefinitionStoreException.java | 18 +++++++++-------- .../support/BeanDefinitionRegistry.java | 3 ++- .../support/DefaultListableBeanFactory.java | 20 +++++++++---------- ...anAnnotationAttributePropagationTests.java | 16 +++++++++++++-- 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/BeanDefinitionStoreException.java b/spring-beans/src/main/java/org/springframework/beans/factory/BeanDefinitionStoreException.java index 44c23a3de83..ccf13754fed 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/BeanDefinitionStoreException.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/BeanDefinitionStoreException.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -78,7 +78,7 @@ public class BeanDefinitionStoreException extends FatalBeanException { /** * Create a new BeanDefinitionStoreException. * @param resourceDescription description of the resource that the bean definition came from - * @param beanName the name of the bean requested + * @param beanName the name of the bean * @param msg the detail message (appended to an introductory message that indicates * the resource and the name of the bean) */ @@ -89,21 +89,23 @@ public class BeanDefinitionStoreException extends FatalBeanException { /** * Create a new BeanDefinitionStoreException. * @param resourceDescription description of the resource that the bean definition came from - * @param beanName the name of the bean requested + * @param beanName the name of the bean * @param msg the detail message (appended to an introductory message that indicates * the resource and the name of the bean) * @param cause the root cause (may be {@code null}) */ - public BeanDefinitionStoreException(@Nullable String resourceDescription, String beanName, String msg, @Nullable Throwable cause) { - super("Invalid bean definition with name '" + beanName + "' defined in " + resourceDescription + ": " + msg, cause); + public BeanDefinitionStoreException( + @Nullable String resourceDescription, String beanName, String msg, @Nullable Throwable cause) { + + super("Invalid bean definition with name '" + beanName + "' defined in " + resourceDescription + ": " + msg, + cause); this.resourceDescription = resourceDescription; this.beanName = beanName; } /** - * Return the description of the resource that the bean - * definition came from, if any. + * Return the description of the resource that the bean definition came from, if available. */ @Nullable public String getResourceDescription() { @@ -111,7 +113,7 @@ public class BeanDefinitionStoreException extends FatalBeanException { } /** - * Return the name of the bean requested, if any. + * Return the name of the bean, if available. */ @Nullable public String getBeanName() { diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionRegistry.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionRegistry.java index c4c670fba09..c99271bc32e 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionRegistry.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,6 +55,7 @@ public interface BeanDefinitionRegistry extends AliasRegistry { * @throws BeanDefinitionStoreException if the BeanDefinition is invalid * or if there is already a BeanDefinition for the specified bean name * (and we are not allowed to override it) + * @see GenericBeanDefinition * @see RootBeanDefinition * @see ChildBeanDefinition */ diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java index 43e7538b0ef..3da1b9ecc9a 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java @@ -802,34 +802,32 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto } } - BeanDefinition oldBeanDefinition; - - oldBeanDefinition = this.beanDefinitionMap.get(beanName); - if (oldBeanDefinition != null) { + BeanDefinition existingDefinition = this.beanDefinitionMap.get(beanName); + if (existingDefinition != null) { if (!isAllowBeanDefinitionOverriding()) { throw new BeanDefinitionStoreException(beanDefinition.getResourceDescription(), beanName, "Cannot register bean definition [" + beanDefinition + "] for bean '" + beanName + - "': There is already [" + oldBeanDefinition + "] bound."); + "': There is already [" + existingDefinition + "] bound."); } - else if (oldBeanDefinition.getRole() < beanDefinition.getRole()) { + else if (existingDefinition.getRole() < beanDefinition.getRole()) { // e.g. was ROLE_APPLICATION, now overriding with ROLE_SUPPORT or ROLE_INFRASTRUCTURE if (logger.isWarnEnabled()) { logger.warn("Overriding user-defined bean definition for bean '" + beanName + "' with a framework-generated bean definition: replacing [" + - oldBeanDefinition + "] with [" + beanDefinition + "]"); + existingDefinition + "] with [" + beanDefinition + "]"); } } - else if (!beanDefinition.equals(oldBeanDefinition)) { + else if (!beanDefinition.equals(existingDefinition)) { if (logger.isInfoEnabled()) { logger.info("Overriding bean definition for bean '" + beanName + - "' with a different definition: replacing [" + oldBeanDefinition + + "' with a different definition: replacing [" + existingDefinition + "] with [" + beanDefinition + "]"); } } else { if (logger.isDebugEnabled()) { logger.debug("Overriding bean definition for bean '" + beanName + - "' with an equivalent definition: replacing [" + oldBeanDefinition + + "' with an equivalent definition: replacing [" + existingDefinition + "] with [" + beanDefinition + "]"); } } @@ -860,7 +858,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto this.frozenBeanDefinitionNames = null; } - if (oldBeanDefinition != null || containsSingleton(beanName)) { + if (existingDefinition != null || containsSingleton(beanName)) { resetBeanDefinition(beanName); } } diff --git a/spring-context/src/test/java/org/springframework/context/annotation/configuration/BeanAnnotationAttributePropagationTests.java b/spring-context/src/test/java/org/springframework/context/annotation/configuration/BeanAnnotationAttributePropagationTests.java index 5c6152262d0..21fe58860f8 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/configuration/BeanAnnotationAttributePropagationTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/configuration/BeanAnnotationAttributePropagationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ package org.springframework.context.annotation.configuration; import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowire; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.DefaultListableBeanFactory; @@ -41,9 +42,20 @@ import static org.junit.Assert.*; * correctly into the resulting BeanDefinition * * @author Chris Beams + * @author Juergen Hoeller */ public class BeanAnnotationAttributePropagationTests { + @Test + public void autowireMetadataIsPropagated() { + @Configuration class Config { + @Bean(autowire=Autowire.BY_TYPE) Object foo() { return null; } + } + + assertEquals("autowire mode was not propagated", + AbstractBeanDefinition.AUTOWIRE_BY_TYPE, beanDef(Config.class).getAutowireMode()); + } + @Test public void initMethodMetadataIsPropagated() { @Configuration class Config { @@ -138,7 +150,7 @@ public class BeanAnnotationAttributePropagationTests { @Test public void eagerConfigurationProducesEagerBeanDefinitions() { - @Lazy(false) @Configuration class Config { // will probably never happen, doesn't make much sense + @Lazy(false) @Configuration class Config { // will probably never happen, doesn't make much sense @Bean Object foo() { return null; } }