1
1
/*
2
- * Copyright 2002-2013 the original author or authors.
2
+ * Copyright 2002-2014 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
@@ -81,6 +81,7 @@ public BeanDefinitionValueResolver(
81
81
this .typeConverter = typeConverter ;
82
82
}
83
83
84
+
84
85
/**
85
86
* Given a PropertyValue, return a value, resolving any references to other
86
87
* beans in the factory if necessary. The value could be:
@@ -123,7 +124,9 @@ else if (value instanceof BeanDefinitionHolder) {
123
124
else if (value instanceof BeanDefinition ) {
124
125
// Resolve plain BeanDefinition, without contained name: use dummy name.
125
126
BeanDefinition bd = (BeanDefinition ) value ;
126
- return resolveInnerBean (argName , "(inner bean)" , bd );
127
+ String innerBeanName = "(inner bean)" + BeanFactoryUtils .GENERATED_BEAN_NAME_SEPARATOR +
128
+ ObjectUtils .getIdentityHexString (bd );
129
+ return resolveInnerBean (argName , innerBeanName , bd );
127
130
}
128
131
else if (value instanceof ManagedArray ) {
129
132
// May need to resolve contained runtime references.
@@ -164,7 +167,7 @@ else if (value instanceof ManagedMap) {
164
167
else if (value instanceof ManagedProperties ) {
165
168
Properties original = (Properties ) value ;
166
169
Properties copy = new Properties ();
167
- for (Map .Entry propEntry : original .entrySet ()) {
170
+ for (Map .Entry < Object , Object > propEntry : original .entrySet ()) {
168
171
Object propKey = propEntry .getKey ();
169
172
Object propValue = propEntry .getValue ();
170
173
if (propKey instanceof TypedStringValue ) {
@@ -256,20 +259,25 @@ private Object resolveInnerBean(Object argName, String innerBeanName, BeanDefini
256
259
mbd = this .beanFactory .getMergedBeanDefinition (innerBeanName , innerBd , this .beanDefinition );
257
260
// Check given bean name whether it is unique. If not already unique,
258
261
// add counter - increasing the counter until the name is unique.
259
- String actualInnerBeanName = adaptInnerBeanName (innerBeanName );
262
+ String actualInnerBeanName = innerBeanName ;
263
+ if (mbd .isSingleton ()) {
264
+ actualInnerBeanName = adaptInnerBeanName (innerBeanName );
265
+ }
260
266
this .beanFactory .registerContainedBean (actualInnerBeanName , this .beanName );
261
267
// Guarantee initialization of beans that the inner bean depends on.
262
268
String [] dependsOn = mbd .getDependsOn ();
263
269
if (dependsOn != null ) {
264
270
for (String dependsOnBean : dependsOn ) {
265
- this .beanFactory .getBean (dependsOnBean );
266
271
this .beanFactory .registerDependentBean (dependsOnBean , actualInnerBeanName );
272
+ this .beanFactory .getBean (dependsOnBean );
267
273
}
268
274
}
275
+ // Actually create the inner bean instance now...
269
276
Object innerBean = this .beanFactory .createBean (actualInnerBeanName , mbd , null );
270
277
if (innerBean instanceof FactoryBean ) {
271
278
boolean synthetic = mbd .isSynthetic ();
272
- return this .beanFactory .getObjectFromFactoryBean ((FactoryBean ) innerBean , actualInnerBeanName , !synthetic );
279
+ return this .beanFactory .getObjectFromFactoryBean (
280
+ (FactoryBean <?>) innerBean , actualInnerBeanName , !synthetic );
273
281
}
274
282
else {
275
283
return innerBean ;
@@ -344,7 +352,7 @@ private Object resolveManagedArray(Object argName, List<?> ml, Class<?> elementT
344
352
/**
345
353
* For each element in the managed list, resolve reference if necessary.
346
354
*/
347
- private List resolveManagedList (Object argName , List <?> ml ) {
355
+ private List <?> resolveManagedList (Object argName , List <?> ml ) {
348
356
List <Object > resolved = new ArrayList <Object >(ml .size ());
349
357
for (int i = 0 ; i < ml .size (); i ++) {
350
358
resolved .add (
@@ -356,7 +364,7 @@ private List resolveManagedList(Object argName, List<?> ml) {
356
364
/**
357
365
* For each element in the managed set, resolve reference if necessary.
358
366
*/
359
- private Set resolveManagedSet (Object argName , Set <?> ms ) {
367
+ private Set <?> resolveManagedSet (Object argName , Set <?> ms ) {
360
368
Set <Object > resolved = new LinkedHashSet <Object >(ms .size ());
361
369
int i = 0 ;
362
370
for (Object m : ms ) {
@@ -369,9 +377,9 @@ private Set resolveManagedSet(Object argName, Set<?> ms) {
369
377
/**
370
378
* For each element in the managed map, resolve reference if necessary.
371
379
*/
372
- private Map resolveManagedMap (Object argName , Map <?, ?> mm ) {
380
+ private Map <?, ?> resolveManagedMap (Object argName , Map <?, ?> mm ) {
373
381
Map <Object , Object > resolved = new LinkedHashMap <Object , Object >(mm .size ());
374
- for (Map .Entry entry : mm .entrySet ()) {
382
+ for (Map .Entry <?, ?> entry : mm .entrySet ()) {
375
383
Object resolvedKey = resolveValueIfNecessary (argName , entry .getKey ());
376
384
Object resolvedValue = resolveValueIfNecessary (
377
385
new KeyedArgName (argName , entry .getKey ()), entry .getValue ());
0 commit comments