17
17
package org .springframework .beans .factory .annotation ;
18
18
19
19
import java .io .Serializable ;
20
+ import java .lang .annotation .Retention ;
21
+ import java .lang .annotation .RetentionPolicy ;
20
22
import java .util .List ;
21
23
import java .util .Map ;
22
24
import java .util .Optional ;
@@ -574,6 +576,60 @@ public void testBeanAutowiredWithFactoryBean() {
574
576
bf .destroySingletons ();
575
577
}
576
578
579
+ @ Test
580
+ public void testNullableFieldInjectionWithBeanAvailable () {
581
+ DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
582
+ AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
583
+ bpp .setBeanFactory (bf );
584
+ bf .addBeanPostProcessor (bpp );
585
+ bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (NullableFieldInjectionBean .class ));
586
+ bf .registerBeanDefinition ("testBean" , new RootBeanDefinition (TestBean .class ));
587
+
588
+ NullableFieldInjectionBean bean = (NullableFieldInjectionBean ) bf .getBean ("annotatedBean" );
589
+ assertSame (bf .getBean ("testBean" ), bean .getTestBean ());
590
+ bf .destroySingletons ();
591
+ }
592
+
593
+ @ Test
594
+ public void testNullableFieldInjectionWithBeanNotAvailable () {
595
+ DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
596
+ AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
597
+ bpp .setBeanFactory (bf );
598
+ bf .addBeanPostProcessor (bpp );
599
+ bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (NullableFieldInjectionBean .class ));
600
+
601
+ NullableFieldInjectionBean bean = (NullableFieldInjectionBean ) bf .getBean ("annotatedBean" );
602
+ assertNull (bean .getTestBean ());
603
+ bf .destroySingletons ();
604
+ }
605
+
606
+ @ Test
607
+ public void testNullableMethodInjectionWithBeanAvailable () {
608
+ DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
609
+ AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
610
+ bpp .setBeanFactory (bf );
611
+ bf .addBeanPostProcessor (bpp );
612
+ bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (NullableMethodInjectionBean .class ));
613
+ bf .registerBeanDefinition ("testBean" , new RootBeanDefinition (TestBean .class ));
614
+
615
+ NullableMethodInjectionBean bean = (NullableMethodInjectionBean ) bf .getBean ("annotatedBean" );
616
+ assertSame (bf .getBean ("testBean" ), bean .getTestBean ());
617
+ bf .destroySingletons ();
618
+ }
619
+
620
+ @ Test
621
+ public void testNullableMethodInjectionWithBeanNotAvailable () {
622
+ DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
623
+ AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
624
+ bpp .setBeanFactory (bf );
625
+ bf .addBeanPostProcessor (bpp );
626
+ bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (NullableMethodInjectionBean .class ));
627
+
628
+ NullableMethodInjectionBean bean = (NullableMethodInjectionBean ) bf .getBean ("annotatedBean" );
629
+ assertNull (bean .getTestBean ());
630
+ bf .destroySingletons ();
631
+ }
632
+
577
633
@ Test
578
634
public void testOptionalFieldInjectionWithBeanAvailable () {
579
635
DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
@@ -1275,6 +1331,36 @@ public boolean isSingleton() {
1275
1331
}
1276
1332
1277
1333
1334
+ @ Retention (RetentionPolicy .RUNTIME )
1335
+ public @interface Nullable {}
1336
+
1337
+
1338
+ public static class NullableFieldInjectionBean {
1339
+
1340
+ @ Inject @ Nullable
1341
+ private TestBean testBean ;
1342
+
1343
+ public TestBean getTestBean () {
1344
+ return this .testBean ;
1345
+ }
1346
+ }
1347
+
1348
+
1349
+ public static class NullableMethodInjectionBean {
1350
+
1351
+ private TestBean testBean ;
1352
+
1353
+ @ Inject
1354
+ public void setTestBean (@ Nullable TestBean testBean ) {
1355
+ this .testBean = testBean ;
1356
+ }
1357
+
1358
+ public TestBean getTestBean () {
1359
+ return this .testBean ;
1360
+ }
1361
+ }
1362
+
1363
+
1278
1364
public static class OptionalFieldInjectionBean {
1279
1365
1280
1366
@ Inject
@@ -1291,8 +1377,8 @@ public static class OptionalMethodInjectionBean {
1291
1377
private Optional <TestBean > testBean ;
1292
1378
1293
1379
@ Inject
1294
- public void setTestBean (Optional <TestBean > testBeanFactory ) {
1295
- this .testBean = testBeanFactory ;
1380
+ public void setTestBean (Optional <TestBean > testBean ) {
1381
+ this .testBean = testBean ;
1296
1382
}
1297
1383
1298
1384
public Optional <TestBean > getTestBean () {
@@ -1317,8 +1403,8 @@ public static class OptionalListMethodInjectionBean {
1317
1403
private Optional <List <TestBean >> testBean ;
1318
1404
1319
1405
@ Inject
1320
- public void setTestBean (Optional <List <TestBean >> testBeanFactory ) {
1321
- this .testBean = testBeanFactory ;
1406
+ public void setTestBean (Optional <List <TestBean >> testBean ) {
1407
+ this .testBean = testBean ;
1322
1408
}
1323
1409
1324
1410
public Optional <List <TestBean >> getTestBean () {
@@ -1343,8 +1429,8 @@ public static class ProviderOfOptionalMethodInjectionBean {
1343
1429
private Provider <Optional <TestBean >> testBean ;
1344
1430
1345
1431
@ Inject
1346
- public void setTestBean (Provider <Optional <TestBean >> testBeanFactory ) {
1347
- this .testBean = testBeanFactory ;
1432
+ public void setTestBean (Provider <Optional <TestBean >> testBean ) {
1433
+ this .testBean = testBean ;
1348
1434
}
1349
1435
1350
1436
public Optional <TestBean > getTestBean () {
0 commit comments