@@ -173,11 +173,14 @@ public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccess
173
173
@ Nullable
174
174
private String factoryMethodName ;
175
175
176
+ @ Nullable
176
177
private ConstructorArgumentValues constructorArgumentValues ;
177
178
179
+ @ Nullable
178
180
private MutablePropertyValues propertyValues ;
179
181
180
- private MethodOverrides methodOverrides = new MethodOverrides ();
182
+ @ Nullable
183
+ private MethodOverrides methodOverrides ;
181
184
182
185
@ Nullable
183
186
private String initMethodName ;
@@ -212,8 +215,8 @@ protected AbstractBeanDefinition() {
212
215
* constructor argument values and property values.
213
216
*/
214
217
protected AbstractBeanDefinition (@ Nullable ConstructorArgumentValues cargs , @ Nullable MutablePropertyValues pvs ) {
215
- this .constructorArgumentValues = ( cargs != null ? cargs : new ConstructorArgumentValues ()) ;
216
- this .propertyValues = ( pvs != null ? pvs : new MutablePropertyValues ()) ;
218
+ this .constructorArgumentValues = cargs ;
219
+ this .propertyValues = pvs ;
217
220
}
218
221
219
222
/**
@@ -229,8 +232,6 @@ protected AbstractBeanDefinition(BeanDefinition original) {
229
232
setLazyInit (original .isLazyInit ());
230
233
setFactoryBeanName (original .getFactoryBeanName ());
231
234
setFactoryMethodName (original .getFactoryMethodName ());
232
- this .constructorArgumentValues = new ConstructorArgumentValues (original .getConstructorArgumentValues ());
233
- this .propertyValues = new MutablePropertyValues (original .getPropertyValues ());
234
235
setRole (original .getRole ());
235
236
setSource (original .getSource ());
236
237
copyAttributesFrom (original );
@@ -240,6 +241,15 @@ protected AbstractBeanDefinition(BeanDefinition original) {
240
241
if (originalAbd .hasBeanClass ()) {
241
242
setBeanClass (originalAbd .getBeanClass ());
242
243
}
244
+ if (originalAbd .hasConstructorArgumentValues ()) {
245
+ setConstructorArgumentValues (new ConstructorArgumentValues (original .getConstructorArgumentValues ()));
246
+ }
247
+ if (originalAbd .hasPropertyValues ()) {
248
+ setPropertyValues (new MutablePropertyValues (original .getPropertyValues ()));
249
+ }
250
+ if (originalAbd .hasMethodOverrides ()) {
251
+ setMethodOverrides (new MethodOverrides (originalAbd .getMethodOverrides ()));
252
+ }
243
253
setAutowireMode (originalAbd .getAutowireMode ());
244
254
setDependencyCheck (originalAbd .getDependencyCheck ());
245
255
setDependsOn (originalAbd .getDependsOn ());
@@ -249,7 +259,6 @@ protected AbstractBeanDefinition(BeanDefinition original) {
249
259
setInstanceSupplier (originalAbd .getInstanceSupplier ());
250
260
setNonPublicAccessAllowed (originalAbd .isNonPublicAccessAllowed ());
251
261
setLenientConstructorResolution (originalAbd .isLenientConstructorResolution ());
252
- setMethodOverrides (new MethodOverrides (originalAbd .getMethodOverrides ()));
253
262
setInitMethodName (originalAbd .getInitMethodName ());
254
263
setEnforceInitMethod (originalAbd .isEnforceInitMethod ());
255
264
setDestroyMethodName (originalAbd .getDestroyMethodName ());
@@ -258,6 +267,8 @@ protected AbstractBeanDefinition(BeanDefinition original) {
258
267
setResource (originalAbd .getResource ());
259
268
}
260
269
else {
270
+ setConstructorArgumentValues (new ConstructorArgumentValues (original .getConstructorArgumentValues ()));
271
+ setPropertyValues (new MutablePropertyValues (original .getPropertyValues ()));
261
272
setResourceDescription (original .getResourceDescription ());
262
273
}
263
274
}
@@ -294,8 +305,6 @@ public void overrideFrom(BeanDefinition other) {
294
305
if (StringUtils .hasLength (other .getFactoryMethodName ())) {
295
306
setFactoryMethodName (other .getFactoryMethodName ());
296
307
}
297
- getConstructorArgumentValues ().addArgumentValues (other .getConstructorArgumentValues ());
298
- getPropertyValues ().addPropertyValues (other .getPropertyValues ());
299
308
setRole (other .getRole ());
300
309
setSource (other .getSource ());
301
310
copyAttributesFrom (other );
@@ -305,6 +314,15 @@ public void overrideFrom(BeanDefinition other) {
305
314
if (otherAbd .hasBeanClass ()) {
306
315
setBeanClass (otherAbd .getBeanClass ());
307
316
}
317
+ if (otherAbd .hasConstructorArgumentValues ()) {
318
+ getConstructorArgumentValues ().addArgumentValues (other .getConstructorArgumentValues ());
319
+ }
320
+ if (otherAbd .hasPropertyValues ()) {
321
+ getPropertyValues ().addPropertyValues (other .getPropertyValues ());
322
+ }
323
+ if (otherAbd .hasMethodOverrides ()) {
324
+ getMethodOverrides ().addOverrides (otherAbd .getMethodOverrides ());
325
+ }
308
326
setAutowireMode (otherAbd .getAutowireMode ());
309
327
setDependencyCheck (otherAbd .getDependencyCheck ());
310
328
setDependsOn (otherAbd .getDependsOn ());
@@ -314,7 +332,6 @@ public void overrideFrom(BeanDefinition other) {
314
332
setInstanceSupplier (otherAbd .getInstanceSupplier ());
315
333
setNonPublicAccessAllowed (otherAbd .isNonPublicAccessAllowed ());
316
334
setLenientConstructorResolution (otherAbd .isLenientConstructorResolution ());
317
- getMethodOverrides ().addOverrides (otherAbd .getMethodOverrides ());
318
335
if (otherAbd .getInitMethodName () != null ) {
319
336
setInitMethodName (otherAbd .getInitMethodName ());
320
337
setEnforceInitMethod (otherAbd .isEnforceInitMethod ());
@@ -327,6 +344,8 @@ public void overrideFrom(BeanDefinition other) {
327
344
setResource (otherAbd .getResource ());
328
345
}
329
346
else {
347
+ getConstructorArgumentValues ().addArgumentValues (other .getConstructorArgumentValues ());
348
+ getPropertyValues ().addPropertyValues (other .getPropertyValues ());
330
349
setResourceDescription (other .getResourceDescription ());
331
350
}
332
351
}
@@ -778,46 +797,59 @@ public String getFactoryMethodName() {
778
797
/**
779
798
* Specify constructor argument values for this bean.
780
799
*/
781
- public void setConstructorArgumentValues (@ Nullable ConstructorArgumentValues constructorArgumentValues ) {
782
- this .constructorArgumentValues =
783
- (constructorArgumentValues != null ? constructorArgumentValues : new ConstructorArgumentValues ());
800
+ public void setConstructorArgumentValues (ConstructorArgumentValues constructorArgumentValues ) {
801
+ this .constructorArgumentValues = constructorArgumentValues ;
784
802
}
785
803
786
804
/**
787
805
* Return constructor argument values for this bean (never {@code null}).
788
806
*/
789
807
@ Override
790
808
public ConstructorArgumentValues getConstructorArgumentValues () {
809
+ if (this .constructorArgumentValues == null ) {
810
+ this .constructorArgumentValues = new ConstructorArgumentValues ();
811
+ }
791
812
return this .constructorArgumentValues ;
792
813
}
793
814
794
815
/**
795
816
* Return if there are constructor argument values defined for this bean.
796
817
*/
797
818
public boolean hasConstructorArgumentValues () {
798
- return ! this .constructorArgumentValues .isEmpty ();
819
+ return ( this . constructorArgumentValues != null && ! this .constructorArgumentValues .isEmpty () );
799
820
}
800
821
801
822
/**
802
823
* Specify property values for this bean, if any.
803
824
*/
804
- public void setPropertyValues (@ Nullable MutablePropertyValues propertyValues ) {
805
- this .propertyValues = ( propertyValues != null ? propertyValues : new MutablePropertyValues ()) ;
825
+ public void setPropertyValues (MutablePropertyValues propertyValues ) {
826
+ this .propertyValues = propertyValues ;
806
827
}
807
828
808
829
/**
809
830
* Return property values for this bean (never {@code null}).
810
831
*/
811
832
@ Override
812
833
public MutablePropertyValues getPropertyValues () {
834
+ if (this .propertyValues == null ) {
835
+ this .propertyValues = new MutablePropertyValues ();
836
+ }
813
837
return this .propertyValues ;
814
838
}
815
839
840
+ /**
841
+ * Return if there are property values values defined for this bean.
842
+ * @since 5.0.2
843
+ */
844
+ public boolean hasPropertyValues () {
845
+ return (this .propertyValues != null && !this .propertyValues .isEmpty ());
846
+ }
847
+
816
848
/**
817
849
* Specify method overrides for the bean, if any.
818
850
*/
819
- public void setMethodOverrides (@ Nullable MethodOverrides methodOverrides ) {
820
- this .methodOverrides = ( methodOverrides != null ? methodOverrides : new MethodOverrides ()) ;
851
+ public void setMethodOverrides (MethodOverrides methodOverrides ) {
852
+ this .methodOverrides = methodOverrides ;
821
853
}
822
854
823
855
/**
@@ -826,9 +858,20 @@ public void setMethodOverrides(@Nullable MethodOverrides methodOverrides) {
826
858
* <p>Never returns {@code null}.
827
859
*/
828
860
public MethodOverrides getMethodOverrides () {
861
+ if (this .methodOverrides == null ) {
862
+ this .methodOverrides = new MethodOverrides ();
863
+ }
829
864
return this .methodOverrides ;
830
865
}
831
866
867
+ /**
868
+ * Return if there are method overrides defined for this bean.
869
+ * @since 5.0.2
870
+ */
871
+ public boolean hasMethodOverrides () {
872
+ return (this .methodOverrides != null && !this .methodOverrides .isEmpty ());
873
+ }
874
+
832
875
/**
833
876
* Set the name of the initializer method.
834
877
* <p>The default is {@code null} in which case there is no initializer method.
@@ -1002,7 +1045,7 @@ public BeanDefinition getOriginatingBeanDefinition() {
1002
1045
* @throws BeanDefinitionValidationException in case of validation failure
1003
1046
*/
1004
1047
public void validate () throws BeanDefinitionValidationException {
1005
- if (! getMethodOverrides (). isEmpty () && getFactoryMethodName () != null ) {
1048
+ if (hasMethodOverrides () && getFactoryMethodName () != null ) {
1006
1049
throw new BeanDefinitionValidationException (
1007
1050
"Cannot combine static factory method with method overrides: " +
1008
1051
"the static factory method must create the instance" );
@@ -1020,9 +1063,8 @@ public void validate() throws BeanDefinitionValidationException {
1020
1063
*/
1021
1064
public void prepareMethodOverrides () throws BeanDefinitionValidationException {
1022
1065
// Check that lookup methods exists.
1023
- MethodOverrides methodOverrides = getMethodOverrides ();
1024
- if (!methodOverrides .isEmpty ()) {
1025
- Set <MethodOverride > overrides = methodOverrides .getOverrides ();
1066
+ if (hasMethodOverrides ()) {
1067
+ Set <MethodOverride > overrides = getMethodOverrides ().getOverrides ();
1026
1068
synchronized (overrides ) {
1027
1069
for (MethodOverride mo : overrides ) {
1028
1070
prepareMethodOverride (mo );
0 commit comments