GenericApplicationContext ctx = new GenericApplicationContext();
for ( Field field : fieldValues.keySet() ) {
Bean beanAnno = field.getAnnotation(Bean.class);
AbstractBeanDefinition beandef = defineInstanceHolderFactoryBean(field.getType(), fieldValues.get(field));
if ((beanAnno != null) && !beanAnno.value().equals("")) {
ctx.registerBeanDefinition(beanAnno.value(), beandef);
} else {
BeanDefinitionReaderUtils.registerWithGeneratedName(beandef, ctx);
}
}
loadBeanDefinitions(testClass, ctx);
fillInMissingFieldBeans(testClass, ctx);
ctx.refresh();
for ( Field field : testClass.getDeclaredFields() ) {
field.setAccessible(true);
Bean beanAnno = field.getAnnotation(Bean.class);
if ( beanAnno == null ) {
if ( fieldValues.containsKey(field) ) {
field.set(ContextHolder.get().getTest().getTarget(), fieldValues.get(field));
}
} else {
if ( ! beanAnno.value().equals("") ) {
field.set(ContextHolder.get().getTest().getTarget(), ctx.getBean(beanAnno.value()));
} else {
String[] beanNames = ctx.getBeanNamesForType(field.getType());
if ( beanNames.length < 1 ) {
throw new BeanCreationException("There are no beans defined with type " + field.getType());
}