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