56
56
* @author John Blum
57
57
* @see java.lang.Class
58
58
* @see java.lang.Object
59
+ * @see java.util.function.Function
60
+ * @see java.util.stream.Stream
59
61
* @see org.springframework.beans.factory.BeanFactory
62
+ * @see org.springframework.beans.factory.FactoryBean
60
63
* @see org.springframework.beans.factory.config.BeanDefinition
61
64
* @see org.springframework.beans.factory.config.RuntimeBeanReference
65
+ * @see org.springframework.core.Ordered
66
+ * @see org.springframework.core.annotation.AnnotationAwareOrderComparator
67
+ * @see org.springframework.core.annotation.Order
62
68
* @since 1.8.0
63
69
*/
64
70
@ SuppressWarnings ("unused" )
@@ -77,7 +83,7 @@ public abstract class SpringUtils {
77
83
* @see java.lang.Class
78
84
* @see java.lang.String
79
85
*/
80
- public static boolean isMatchingBean (BeanFactory beanFactory , String beanName , Class <?> beanType ) {
86
+ public static boolean isMatchingBean (@ NonNull BeanFactory beanFactory , String beanName , Class <?> beanType ) {
81
87
return beanFactory .containsBean (beanName ) && beanFactory .isTypeMatch (beanName , beanType );
82
88
}
83
89
@@ -90,11 +96,12 @@ public static boolean isMatchingBean(BeanFactory beanFactory, String beanName, C
90
96
* @return the given {@link BeanDefinition}.
91
97
* @see org.springframework.beans.factory.config.BeanDefinition
92
98
*/
99
+ @ NonNull
93
100
public static BeanDefinition addDependsOn (@ NonNull BeanDefinition beanDefinition , @ Nullable String ... beanNames ) {
94
101
95
102
List <String > dependsOnList = new ArrayList <>();
96
103
97
- Collections .addAll (dependsOnList , nullSafeArray (beanDefinition .getDependsOn (), String .class ));
104
+ Collections .addAll (dependsOnList , ArrayUtils . nullSafeArray (beanDefinition .getDependsOn (), String .class ));
98
105
dependsOnList .addAll (Arrays .asList (nullSafeArray (beanNames , String .class )));
99
106
beanDefinition .setDependsOn (dependsOnList .toArray (new String [0 ]));
100
107
@@ -169,6 +176,7 @@ public static <T> List<T> getBeansOfTypeOrdered(@NonNull ConfigurableListableBea
169
176
}
170
177
171
178
// No Javadoc
179
+ @ NonNull
172
180
private static <T > List <OrderedBeanWrapper <T >> orderUnorderedBeans (@ NonNull ConfigurableListableBeanFactory beanFactory ,
173
181
@ NonNull Map <String , T > beansOfType , @ NonNull Set <String > unorderedBeanNames ) {
174
182
@@ -200,18 +208,30 @@ private static <T> OrderedBeanWrapper<T> toOrderedBeanWrapper(@NonNull Map.Entry
200
208
201
209
T bean = beanEntry .getValue ();
202
210
203
- Integer order = bean instanceof Ordered
204
- ? ((Ordered ) bean ).getOrder ()
205
- : Optional .ofNullable (bean )
206
- .map (Object ::getClass )
207
- .map (OrderUtils ::getOrder )
208
- .orElse (null );
211
+ Integer order = getOrder (bean );
212
+
213
+ if (order == null ) {
214
+ order = bean != null ? OrderUtils .getOrder (bean .getClass ()) : null ;
215
+ }
209
216
210
217
return order != null
211
218
? DefaultOrderedBeanWrapper .from (beanEntry .getKey (), bean , order )
212
219
: null ;
213
220
}
214
221
222
+ /**
223
+ * Null-safe operation to return the {@link Integer order} of the given {@link Object} if it is {@link Ordered}
224
+ * or {@literal null} if the given {@link Object} is not {@link Ordered}.
225
+ *
226
+ * @param target {@link Object} to evaluate; may be {@literal null}.
227
+ * @return the {@link Integer order} of the given {@link Object} if {@link Ordered},
228
+ * otherwise return {@literal null}.
229
+ * @see org.springframework.core.Ordered
230
+ */
231
+ public static @ Nullable Integer getOrder (@ Nullable Object target ) {
232
+ return target instanceof Ordered ? ((Ordered ) target ).getOrder () : null ;
233
+ }
234
+
215
235
/**
216
236
* Returns bean of the given {@link Class type} in an ordered {@link Stream}.
217
237
*
@@ -223,7 +243,8 @@ private static <T> OrderedBeanWrapper<T> toOrderedBeanWrapper(@NonNull Map.Entry
223
243
* @see java.util.stream.Stream
224
244
* @see java.lang.Class
225
245
*/
226
- public static <T > Stream <T > getOrderedStreamOfBeansByType (BeanFactory beanFactory , Class <T > beanType ) {
246
+ public static <T > Stream <T > getOrderedStreamOfBeansByType (@ NonNull BeanFactory beanFactory ,
247
+ @ NonNull Class <T > beanType ) {
227
248
228
249
Assert .notNull (beanFactory , "BeanFactory must not be null" );
229
250
Assert .notNull (beanType ,"Bean type must not be null" );
@@ -295,6 +316,14 @@ public static String nullSafeSimpleName(Class<?> type) {
295
316
return type != null ? type .getSimpleName () : null ;
296
317
}
297
318
319
+ public static Class <?> nullSafeType (Object target ) {
320
+ return nullSafeType (target , null );
321
+ }
322
+
323
+ public static Class <?> nullSafeType (Object target , Class <?> defaultType ) {
324
+ return target != null ? target .getClass () : defaultType ;
325
+ }
326
+
298
327
public static boolean safeDoOperation (VoidReturningThrowableOperation operation ) {
299
328
300
329
try {
0 commit comments