1
2
3
4
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 }