View Javadoc
1   /*
2    * MIT License
3    * Copyright (c) 2006-2025 JMockit developers
4    * See LICENSE file for full license text.
5    */
6   package mockit.integration.springframework;
7   
8   import edu.umd.cs.findbugs.annotations.NonNull;
9   import edu.umd.cs.findbugs.annotations.Nullable;
10  
11  import mockit.internal.injection.BeanExporter;
12  
13  import org.springframework.beans.factory.BeanNotOfRequiredTypeException;
14  import org.springframework.beans.factory.NoSuchBeanDefinitionException;
15  
16  final class BeanLookup {
17      private BeanLookup() {
18      }
19  
20      @NonNull
21      static Object getBean(@NonNull BeanExporter beanExporter, @NonNull String name) {
22          Object bean = beanExporter.getBean(name);
23  
24          if (bean == null) {
25              throw new NoSuchBeanDefinitionException(name);
26          }
27  
28          return bean;
29      }
30  
31      @NonNull
32      @SuppressWarnings("unchecked")
33      static <T> T getBean(@NonNull BeanExporter beanExporter, @NonNull String name, @Nullable Class<T> requiredType) {
34          if (requiredType == null) {
35              return (T) getBean(beanExporter, name);
36          }
37  
38          T bean = (T) beanExporter.getBean(name);
39  
40          if (bean != null) {
41              Class<?> actualType = bean.getClass();
42  
43              if (!requiredType.isAssignableFrom(actualType)) {
44                  throw new BeanNotOfRequiredTypeException(name, requiredType, actualType);
45              }
46          } else {
47              bean = beanExporter.getBean(requiredType);
48  
49              if (bean == null) {
50                  throw new NoSuchBeanDefinitionException(requiredType, "with bean name \"" + name + '"');
51              }
52          }
53  
54          return bean;
55      }
56  
57      @NonNull
58      static <T> T getBean(@NonNull BeanExporter beanExporter, @NonNull Class<T> requiredType) {
59          T bean = beanExporter.getBean(requiredType);
60  
61          if (bean == null) {
62              throw new NoSuchBeanDefinitionException(requiredType);
63          }
64  
65          return bean;
66      }
67  }