16
16
17
17
package org .springframework .context .support ;
18
18
19
+ import org .junit .jupiter .api .AfterEach ;
19
20
import org .junit .jupiter .api .Test ;
20
21
21
22
import org .springframework .beans .factory .NoUniqueBeanDefinitionException ;
24
25
import org .springframework .context .ApplicationContext ;
25
26
import org .springframework .context .ApplicationContextAware ;
26
27
import org .springframework .core .metrics .jfr .FlightRecorderApplicationStartup ;
27
- import org .springframework .util .ObjectUtils ;
28
28
29
29
import static org .assertj .core .api .Assertions .assertThat ;
30
30
import static org .assertj .core .api .Assertions .assertThatExceptionOfType ;
36
36
*/
37
37
class GenericApplicationContextTests {
38
38
39
+ private final GenericApplicationContext context = new GenericApplicationContext ();
40
+
41
+ @ AfterEach
42
+ void closeContext () {
43
+ context .close ();
44
+ }
45
+
39
46
@ Test
40
47
void getBeanForClass () {
41
- GenericApplicationContext ac = new GenericApplicationContext ();
42
- ac .registerBeanDefinition ("testBean" , new RootBeanDefinition (String .class ));
43
- ac .refresh ();
48
+ context .registerBeanDefinition ("testBean" , new RootBeanDefinition (String .class ));
49
+ context .refresh ();
44
50
45
- assertThat (ac .getBean ("testBean" )).isEqualTo ("" );
46
- assertThat (ac .getBean (String .class )).isSameAs (ac .getBean ("testBean" ));
47
- assertThat (ac .getBean (CharSequence .class )).isSameAs (ac .getBean ("testBean" ));
51
+ assertThat (context .getBean ("testBean" )).isEqualTo ("" );
52
+ assertThat (context .getBean (String .class )).isSameAs (context .getBean ("testBean" ));
53
+ assertThat (context .getBean (CharSequence .class )).isSameAs (context .getBean ("testBean" ));
48
54
49
- assertThatExceptionOfType (NoUniqueBeanDefinitionException .class ).isThrownBy (() ->
50
- ac .getBean (Object .class ));
51
- ac .close ();
55
+ assertThatExceptionOfType (NoUniqueBeanDefinitionException .class )
56
+ .isThrownBy (() -> context .getBean (Object .class ));
52
57
}
53
58
54
59
@ Test
55
60
void withSingletonSupplier () {
56
- GenericApplicationContext ac = new GenericApplicationContext ();
57
- ac .registerBeanDefinition ("testBean" , new RootBeanDefinition (String .class , ac ::toString ));
58
- ac .refresh ();
59
-
60
- assertThat (ac .getBean ("testBean" )).isSameAs (ac .getBean ("testBean" ));
61
- assertThat (ac .getBean (String .class )).isSameAs (ac .getBean ("testBean" ));
62
- assertThat (ac .getBean (CharSequence .class )).isSameAs (ac .getBean ("testBean" ));
63
- assertThat (ac .getBean ("testBean" )).isEqualTo (ac .toString ());
64
- ac .close ();
61
+ context .registerBeanDefinition ("testBean" , new RootBeanDefinition (String .class , context ::toString ));
62
+ context .refresh ();
63
+
64
+ assertThat (context .getBean ("testBean" )).isSameAs (context .getBean ("testBean" ));
65
+ assertThat (context .getBean (String .class )).isSameAs (context .getBean ("testBean" ));
66
+ assertThat (context .getBean (CharSequence .class )).isSameAs (context .getBean ("testBean" ));
67
+ assertThat (context .getBean ("testBean" )).isEqualTo (context .toString ());
65
68
}
66
69
67
70
@ Test
68
71
void withScopedSupplier () {
69
- GenericApplicationContext ac = new GenericApplicationContext ();
70
- ac .registerBeanDefinition ("testBean" ,
71
- new RootBeanDefinition (String .class , BeanDefinition .SCOPE_PROTOTYPE , ac ::toString ));
72
- ac .refresh ();
73
-
74
- assertThat (ac .getBean ("testBean" )).isNotSameAs (ac .getBean ("testBean" ));
75
- assertThat (ac .getBean (String .class )).isEqualTo (ac .getBean ("testBean" ));
76
- assertThat (ac .getBean (CharSequence .class )).isEqualTo (ac .getBean ("testBean" ));
77
- assertThat (ac .getBean ("testBean" )).isEqualTo (ac .toString ());
78
- ac .close ();
72
+ context .registerBeanDefinition ("testBean" ,
73
+ new RootBeanDefinition (String .class , BeanDefinition .SCOPE_PROTOTYPE , context ::toString ));
74
+ context .refresh ();
75
+
76
+ assertThat (context .getBean ("testBean" )).isNotSameAs (context .getBean ("testBean" ));
77
+ assertThat (context .getBean (String .class )).isEqualTo (context .getBean ("testBean" ));
78
+ assertThat (context .getBean (CharSequence .class )).isEqualTo (context .getBean ("testBean" ));
79
+ assertThat (context .getBean ("testBean" )).isEqualTo (context .toString ());
79
80
}
80
81
81
82
@ Test
82
83
void accessAfterClosing () {
83
- GenericApplicationContext ac = new GenericApplicationContext ();
84
- ac .registerBeanDefinition ("testBean" , new RootBeanDefinition (String .class ));
85
- ac .refresh ();
86
-
87
- assertThat (ac .getBean (String .class )).isSameAs (ac .getBean ("testBean" ));
88
- assertThat (ac .getAutowireCapableBeanFactory ().getBean (String .class )).isSameAs (ac .getAutowireCapableBeanFactory ().getBean ("testBean" ));
84
+ context .registerBeanDefinition ("testBean" , new RootBeanDefinition (String .class ));
85
+ context .refresh ();
89
86
90
- ac .close ();
87
+ assertThat (context .getBean (String .class )).isSameAs (context .getBean ("testBean" ));
88
+ assertThat (context .getAutowireCapableBeanFactory ().getBean (String .class ))
89
+ .isSameAs (context .getAutowireCapableBeanFactory ().getBean ("testBean" ));
91
90
92
- assertThatIllegalStateException ().isThrownBy (() ->
93
- ac .getBean (String .class ));
91
+ context .close ();
94
92
95
- assertThatIllegalStateException ().isThrownBy (() -> {
96
- ac .getAutowireCapableBeanFactory ().getBean ("testBean" );
97
- ac .getAutowireCapableBeanFactory ().getBean (String .class );
98
- });
99
- ac .close ();
93
+ assertThatIllegalStateException ()
94
+ .isThrownBy (() -> context .getBean (String .class ));
95
+ assertThatIllegalStateException ()
96
+ .isThrownBy (() -> context .getAutowireCapableBeanFactory ().getBean (String .class ));
97
+ assertThatIllegalStateException ()
98
+ .isThrownBy (() -> context .getAutowireCapableBeanFactory ().getBean ("testBean" ));
100
99
}
101
100
102
101
@ Test
103
102
void individualBeans () {
104
- GenericApplicationContext context = new GenericApplicationContext ();
105
103
context .registerBean (BeanA .class );
106
104
context .registerBean (BeanB .class );
107
105
context .registerBean (BeanC .class );
@@ -110,12 +108,10 @@ void individualBeans() {
110
108
assertThat (context .getBean (BeanA .class ).b ).isSameAs (context .getBean (BeanB .class ));
111
109
assertThat (context .getBean (BeanA .class ).c ).isSameAs (context .getBean (BeanC .class ));
112
110
assertThat (context .getBean (BeanB .class ).applicationContext ).isSameAs (context );
113
- context .close ();
114
111
}
115
112
116
113
@ Test
117
114
void individualNamedBeans () {
118
- GenericApplicationContext context = new GenericApplicationContext ();
119
115
context .registerBean ("a" , BeanA .class );
120
116
context .registerBean ("b" , BeanB .class );
121
117
context .registerBean ("c" , BeanC .class );
@@ -124,12 +120,10 @@ void individualNamedBeans() {
124
120
assertThat (context .getBean ("a" , BeanA .class ).b ).isSameAs (context .getBean ("b" ));
125
121
assertThat (context .getBean ("a" , BeanA .class ).c ).isSameAs (context .getBean ("c" ));
126
122
assertThat (context .getBean ("b" , BeanB .class ).applicationContext ).isSameAs (context );
127
- context .close ();
128
123
}
129
124
130
125
@ Test
131
126
void individualBeanWithSupplier () {
132
- GenericApplicationContext context = new GenericApplicationContext ();
133
127
context .registerBean (BeanA .class ,
134
128
() -> new BeanA (context .getBean (BeanB .class ), context .getBean (BeanC .class )));
135
129
context .registerBean (BeanB .class , BeanB ::new );
@@ -141,14 +135,14 @@ void individualBeanWithSupplier() {
141
135
assertThat (context .getBean (BeanA .class ).c ).isSameAs (context .getBean (BeanC .class ));
142
136
assertThat (context .getBean (BeanB .class ).applicationContext ).isSameAs (context );
143
137
144
- assertThat (context .getDefaultListableBeanFactory ().getDependentBeans (BeanB .class .getName ())).isEqualTo (new String [] {BeanA .class .getName ()});
145
- assertThat (context .getDefaultListableBeanFactory ().getDependentBeans (BeanC .class .getName ())).isEqualTo (new String [] {BeanA .class .getName ()});
146
- context .close ();
138
+ assertThat (context .getDefaultListableBeanFactory ().getDependentBeans (BeanB .class .getName ()))
139
+ .containsExactly (BeanA .class .getName ());
140
+ assertThat (context .getDefaultListableBeanFactory ().getDependentBeans (BeanC .class .getName ()))
141
+ .containsExactly (BeanA .class .getName ());
147
142
}
148
143
149
144
@ Test
150
145
void individualBeanWithSupplierAndCustomizer () {
151
- GenericApplicationContext context = new GenericApplicationContext ();
152
146
context .registerBean (BeanA .class ,
153
147
() -> new BeanA (context .getBean (BeanB .class ), context .getBean (BeanC .class )),
154
148
bd -> bd .setLazyInit (true ));
@@ -160,12 +154,10 @@ void individualBeanWithSupplierAndCustomizer() {
160
154
assertThat (context .getBean (BeanA .class ).b ).isSameAs (context .getBean (BeanB .class ));
161
155
assertThat (context .getBean (BeanA .class ).c ).isSameAs (context .getBean (BeanC .class ));
162
156
assertThat (context .getBean (BeanB .class ).applicationContext ).isSameAs (context );
163
- context .close ();
164
157
}
165
158
166
159
@ Test
167
160
void individualNamedBeanWithSupplier () {
168
- GenericApplicationContext context = new GenericApplicationContext ();
169
161
context .registerBean ("a" , BeanA .class ,
170
162
() -> new BeanA (context .getBean (BeanB .class ), context .getBean (BeanC .class )));
171
163
context .registerBean ("b" , BeanB .class , BeanB ::new );
@@ -176,12 +168,10 @@ void individualNamedBeanWithSupplier() {
176
168
assertThat (context .getBean (BeanA .class ).b ).isSameAs (context .getBean ("b" , BeanB .class ));
177
169
assertThat (context .getBean ("a" , BeanA .class ).c ).isSameAs (context .getBean ("c" ));
178
170
assertThat (context .getBean ("b" , BeanB .class ).applicationContext ).isSameAs (context );
179
- context .close ();
180
171
}
181
172
182
173
@ Test
183
174
void individualNamedBeanWithSupplierAndCustomizer () {
184
- GenericApplicationContext context = new GenericApplicationContext ();
185
175
context .registerBean ("a" , BeanA .class ,
186
176
() -> new BeanA (context .getBean (BeanB .class ), context .getBean (BeanC .class )),
187
177
bd -> bd .setLazyInit (true ));
@@ -193,33 +183,30 @@ void individualNamedBeanWithSupplierAndCustomizer() {
193
183
assertThat (context .getBean (BeanA .class ).b ).isSameAs (context .getBean ("b" , BeanB .class ));
194
184
assertThat (context .getBean ("a" , BeanA .class ).c ).isSameAs (context .getBean ("c" ));
195
185
assertThat (context .getBean ("b" , BeanB .class ).applicationContext ).isSameAs (context );
196
- context .close ();
197
186
}
198
187
199
188
@ Test
200
189
void individualBeanWithNullReturningSupplier () {
201
- GenericApplicationContext context = new GenericApplicationContext ();
202
190
context .registerBean ("a" , BeanA .class , () -> null );
203
191
context .registerBean ("b" , BeanB .class , BeanB ::new );
204
192
context .registerBean ("c" , BeanC .class , BeanC ::new );
205
193
context .refresh ();
206
194
207
- assertThat (ObjectUtils .containsElement (context .getBeanNamesForType (BeanA .class ), "a" )).isTrue ();
208
- assertThat (ObjectUtils .containsElement (context .getBeanNamesForType (BeanB .class ), "b" )).isTrue ();
209
- assertThat (ObjectUtils .containsElement (context .getBeanNamesForType (BeanC .class ), "c" )).isTrue ();
210
- assertThat (context .getBeansOfType (BeanA .class ).isEmpty ()).isTrue ();
211
- assertThat (context .getBeansOfType (BeanB .class ).values ().iterator ().next ()).isSameAs (context .getBean (BeanB .class ));
212
- assertThat (context .getBeansOfType (BeanC .class ).values ().iterator ().next ()).isSameAs (context .getBean (BeanC .class ));
213
- context .close ();
195
+ assertThat (context .getBeanNamesForType (BeanA .class )).containsExactly ("a" );
196
+ assertThat (context .getBeanNamesForType (BeanB .class )).containsExactly ("b" );
197
+ assertThat (context .getBeanNamesForType (BeanC .class )).containsExactly ("c" );
198
+ assertThat (context .getBeansOfType (BeanA .class )).isEmpty ();
199
+ assertThat (context .getBeansOfType (BeanB .class ).values ().iterator ().next ())
200
+ .isSameAs (context .getBean (BeanB .class ));
201
+ assertThat (context .getBeansOfType (BeanC .class ).values ().iterator ().next ())
202
+ .isSameAs (context .getBean (BeanC .class ));
214
203
}
215
204
216
205
@ Test
217
206
void configureApplicationStartupOnBeanFactory () {
218
207
FlightRecorderApplicationStartup applicationStartup = new FlightRecorderApplicationStartup ();
219
- GenericApplicationContext context = new GenericApplicationContext ();
220
208
context .setApplicationStartup (applicationStartup );
221
209
assertThat (context .getBeanFactory ().getApplicationStartup ()).isEqualTo (applicationStartup );
222
- context .close ();
223
210
}
224
211
225
212
0 commit comments