Browse Source
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4131 50f2f4bb-b051-0410-bef5-90022cba6387pull/1/merge
4 changed files with 273 additions and 1 deletions
@ -0,0 +1,159 @@
@@ -0,0 +1,159 @@
|
||||
/* |
||||
* Copyright 2002-2011 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. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.test.context.support; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
import org.apache.commons.logging.Log; |
||||
import org.apache.commons.logging.LogFactory; |
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory; |
||||
import org.springframework.context.ApplicationContext; |
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext; |
||||
import org.springframework.context.annotation.AnnotationConfigUtils; |
||||
import org.springframework.context.support.GenericApplicationContext; |
||||
import org.springframework.util.ObjectUtils; |
||||
|
||||
/** |
||||
* TODO Document AnnotationConfigContextLoader. |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 3.1 |
||||
*/ |
||||
public class AnnotationConfigContextLoader extends AbstractContextLoader { |
||||
|
||||
private static final Log logger = LogFactory.getLog(AnnotationConfigContextLoader.class); |
||||
|
||||
|
||||
/** |
||||
* TODO Document loadContext(). |
||||
* |
||||
* @see org.springframework.test.context.ContextLoader#loadContext(java.lang.String[]) |
||||
*/ |
||||
public ApplicationContext loadContext(String... locations) throws Exception { |
||||
if (logger.isDebugEnabled()) { |
||||
logger.debug("Creating an AnnotationConfigApplicationContext for " |
||||
+ ObjectUtils.nullSafeToString(locations)); |
||||
} |
||||
|
||||
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); |
||||
prepareContext(context); |
||||
customizeBeanFactory(context.getDefaultListableBeanFactory()); |
||||
|
||||
List<Class<?>> configClasses = new ArrayList<Class<?>>(); |
||||
for (String location : locations) { |
||||
final Class<?> clazz = getClass().getClassLoader().loadClass(location); |
||||
configClasses.add(clazz); |
||||
} |
||||
|
||||
if (logger.isDebugEnabled()) { |
||||
logger.debug("Loading AnnotationConfigApplicationContext from config classes: " + configClasses); |
||||
} |
||||
|
||||
for (Class<?> configClass : configClasses) { |
||||
context.register(configClass); |
||||
} |
||||
|
||||
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); |
||||
customizeContext(context); |
||||
context.refresh(); |
||||
context.registerShutdownHook(); |
||||
|
||||
return context; |
||||
} |
||||
|
||||
/** |
||||
* Prepare the {@link GenericApplicationContext} created by this |
||||
* ContextLoader. Called <i>before</> bean definitions are read. |
||||
* <p> |
||||
* The default implementation is empty. Can be overridden in subclasses to |
||||
* customize GenericApplicationContext's standard settings. |
||||
* |
||||
* @param context the context for which the BeanDefinitionReader should be |
||||
* created |
||||
* @see #loadContext |
||||
* @see org.springframework.context.support.GenericApplicationContext#setResourceLoader |
||||
* @see org.springframework.context.support.GenericApplicationContext#setId |
||||
*/ |
||||
protected void prepareContext(GenericApplicationContext context) { |
||||
} |
||||
|
||||
/** |
||||
* Customize the internal bean factory of the ApplicationContext created by |
||||
* this ContextLoader. |
||||
* <p> |
||||
* The default implementation is empty but can be overridden in subclasses |
||||
* to customize DefaultListableBeanFactory's standard settings. |
||||
* |
||||
* @param beanFactory the bean factory created by this ContextLoader |
||||
* @see #loadContext |
||||
* @see org.springframework.beans.factory.support.DefaultListableBeanFactory#setAllowBeanDefinitionOverriding(boolean) |
||||
* @see org.springframework.beans.factory.support.DefaultListableBeanFactory#setAllowEagerClassLoading(boolean) |
||||
* @see org.springframework.beans.factory.support.DefaultListableBeanFactory#setAllowCircularReferences(boolean) |
||||
* @see org.springframework.beans.factory.support.DefaultListableBeanFactory#setAllowRawInjectionDespiteWrapping(boolean) |
||||
*/ |
||||
protected void customizeBeanFactory(DefaultListableBeanFactory beanFactory) { |
||||
} |
||||
|
||||
/** |
||||
* Customize the {@link GenericApplicationContext} created by this |
||||
* ContextLoader <i>after</i> bean definitions have been loaded into the |
||||
* context but before the context is refreshed. |
||||
* <p> |
||||
* The default implementation is empty but can be overridden in subclasses |
||||
* to customize the application context. |
||||
* |
||||
* @param context the newly created application context |
||||
* @see #loadContext(String...) |
||||
*/ |
||||
protected void customizeContext(GenericApplicationContext context) { |
||||
} |
||||
|
||||
/** |
||||
* TODO Document overridden generateDefaultLocations(). |
||||
* |
||||
* @see org.springframework.test.context.support.AbstractContextLoader#generateDefaultLocations(java.lang.Class) |
||||
*/ |
||||
@Override |
||||
protected String[] generateDefaultLocations(Class<?> clazz) { |
||||
// TODO Implement generateDefaultLocations().
|
||||
throw new UnsupportedOperationException("Not yet implemented"); |
||||
} |
||||
|
||||
/** |
||||
* TODO Document modifyLocations(). |
||||
* |
||||
* @see org.springframework.test.context.support.AbstractContextLoader#modifyLocations(java.lang.Class, |
||||
* java.lang.String[]) |
||||
*/ |
||||
@Override |
||||
protected String[] modifyLocations(Class<?> clazz, String... locations) { |
||||
// TODO Implement modifyLocations() (?).
|
||||
return locations; |
||||
} |
||||
|
||||
/** |
||||
* TODO Document getResourceSuffix(). |
||||
* |
||||
* @see org.springframework.test.context.support.AbstractContextLoader#getResourceSuffix() |
||||
*/ |
||||
@Override |
||||
protected String getResourceSuffix() { |
||||
return "Config"; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
/* |
||||
* Copyright 2002-2011 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. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.test.context.junit4; |
||||
|
||||
import org.springframework.test.context.ContextConfiguration; |
||||
import org.springframework.test.context.support.AnnotationConfigContextLoader; |
||||
|
||||
/** |
||||
* TODO [SPR-6184] Document AnnotationConfigSpringJUnit4ClassRunnerAppCtxTests. |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 3.1 |
||||
*/ |
||||
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = AnnotationConfigSpringJUnit4ClassRunnerAppCtxTestsConfig.class, inheritLocations = false) |
||||
public class AnnotationConfigSpringJUnit4ClassRunnerAppCtxTests extends SpringJUnit4ClassRunnerAppCtxTests { |
||||
/* all tests are in the parent class. */ |
||||
} |
||||
@ -0,0 +1,62 @@
@@ -0,0 +1,62 @@
|
||||
/* |
||||
* Copyright 2002-2011 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. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.test.context.junit4; |
||||
|
||||
import org.springframework.beans.Employee; |
||||
import org.springframework.beans.Pet; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
|
||||
/** |
||||
* TODO [SPR-6184] Document configuration class. |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 3.1 |
||||
*/ |
||||
@Configuration |
||||
public class AnnotationConfigSpringJUnit4ClassRunnerAppCtxTestsConfig { |
||||
|
||||
@Bean |
||||
public Employee employee() { |
||||
Employee employee = new Employee(); |
||||
employee.setName("John Smith"); |
||||
employee.setAge(42); |
||||
employee.setCompany("Acme Widgets, Inc."); |
||||
return employee; |
||||
} |
||||
|
||||
@Bean |
||||
public Pet pet() { |
||||
return new Pet("Fido"); |
||||
} |
||||
|
||||
@Bean |
||||
public String foo() { |
||||
return "Foo"; |
||||
} |
||||
|
||||
@Bean |
||||
public String bar() { |
||||
return "Bar"; |
||||
} |
||||
|
||||
@Bean |
||||
public String quux() { |
||||
return "Quux"; |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue