Polishing
This commit is contained in:
parent
490b78a3d3
commit
a8b747c21c
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue