in core/src/main/java/hudson/util/spring/BeanBuilder.java [413:484]
private BeanConfiguration invokeBeanDefiningMethod(String name, Object[] args) {
BeanConfiguration old = currentBeanConfig;
try {
if(args[0] instanceof Class) {
Class beanClass = args[0] instanceof Class ? (Class)args[0] : args[0].getClass();
if(args.length >= 1) {
if(args[args.length-1] instanceof Closure) {
if(args.length-1 != 1) {
Object[] constructorArgs = ArrayUtils.subarray(args, 1, args.length-1);
filterGStringReferences(constructorArgs);
if(name.equals(ANONYMOUS_BEAN))
currentBeanConfig = springConfig.createSingletonBean(beanClass,Arrays.asList(constructorArgs));
else
currentBeanConfig = springConfig.addSingletonBean(name, beanClass, Arrays.asList(constructorArgs));
}
else {
if(name.equals(ANONYMOUS_BEAN))
currentBeanConfig = springConfig.createSingletonBean(beanClass);
else
currentBeanConfig = springConfig.addSingletonBean(name, beanClass);
}
}
else {
Object[] constructorArgs = ArrayUtils.subarray(args, 1, args.length);
filterGStringReferences(constructorArgs);
if(name.equals(ANONYMOUS_BEAN))
currentBeanConfig = springConfig.createSingletonBean(beanClass,Arrays.asList(constructorArgs));
else
currentBeanConfig = springConfig.addSingletonBean(name, beanClass, Arrays.asList(constructorArgs));
}
}
}
else if(args[0] instanceof RuntimeBeanReference) {
currentBeanConfig = springConfig.addSingletonBean(name);
currentBeanConfig.setFactoryBean(((RuntimeBeanReference)args[0]).getBeanName());
}
else if(args[0] instanceof Map) {
currentBeanConfig = springConfig.addSingletonBean(name);
Map.Entry factoryBeanEntry = (Map.Entry)((Map)args[0]).entrySet().iterator().next();
currentBeanConfig.setFactoryBean(factoryBeanEntry.getKey().toString());
currentBeanConfig.setFactoryMethod(factoryBeanEntry.getValue().toString());
}
else if(args[0] instanceof Closure) {
currentBeanConfig = springConfig.addAbstractBean(name);
}
else {
Object[] constructorArgs;
if(args[args.length-1] instanceof Closure) {
constructorArgs= ArrayUtils.subarray(args, 0, args.length-1);
}
else {
constructorArgs= ArrayUtils.subarray(args, 0, args.length);
}
filterGStringReferences(constructorArgs);
currentBeanConfig = new DefaultBeanConfiguration(name, null, Arrays.asList(constructorArgs));
springConfig.addBeanConfiguration(name,currentBeanConfig);
}
if(args[args.length-1] instanceof Closure) {
Closure callable = (Closure)args[args.length-1];
callable.setDelegate(this);
callable.setResolveStrategy(Closure.DELEGATE_FIRST);
callable.call(new Object[]{currentBeanConfig});
}
return currentBeanConfig;
} finally {
currentBeanConfig = old;
}
}