|
20 | 20 | import java.util.HashMap;
|
21 | 21 | import java.util.Map;
|
22 | 22 |
|
23 |
| -import org.springframework.beans.BeansException; |
24 | 23 | import org.springframework.beans.factory.BeanCreationException;
|
25 | 24 | import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
26 | 25 | import org.springframework.util.Assert;
|
|
36 | 35 | * @author Sam Brannen
|
37 | 36 | * @since 6.2
|
38 | 37 | */
|
39 |
| -class BeanOverrideRegistrar { |
| 38 | +class BeanOverrideRegistry { |
40 | 39 |
|
41 |
| - private final Map<BeanOverrideHandler, String> beanNameRegistry = new HashMap<>(); |
| 40 | + private final Map<BeanOverrideHandler, String> handlerToBeanNameMap = new HashMap<>(); |
42 | 41 |
|
43 | 42 | private final Map<String, BeanOverrideHandler> wrappingBeanOverrideHandlers = new HashMap<>();
|
44 | 43 |
|
45 | 44 | private final ConfigurableBeanFactory beanFactory;
|
46 | 45 |
|
47 | 46 |
|
48 |
| - BeanOverrideRegistrar(ConfigurableBeanFactory beanFactory) { |
| 47 | + BeanOverrideRegistry(ConfigurableBeanFactory beanFactory) { |
49 | 48 | Assert.notNull(beanFactory, "ConfigurableBeanFactory must not be null");
|
50 | 49 | this.beanFactory = beanFactory;
|
51 | 50 | }
|
52 | 51 |
|
53 | 52 | /**
|
54 | 53 | * Register the provided {@link BeanOverrideHandler} and associate it with the
|
55 | 54 | * given {@code beanName}.
|
56 |
| - */ |
57 |
| - void registerBeanOverrideHandler(BeanOverrideHandler handler, String beanName) { |
58 |
| - this.beanNameRegistry.put(handler, beanName); |
59 |
| - } |
60 |
| - |
61 |
| - /** |
62 |
| - * Register the provided {@link BeanOverrideHandler} as a |
63 |
| - * {@linkplain BeanOverrideStrategy#WRAP "wrapping"} handler and associate it |
| 55 | + * <p>Also associates a {@linkplain BeanOverrideStrategy#WRAP "wrapping"} handler |
64 | 56 | * with the given {@code beanName}, allowing for subsequent wrapping of the
|
65 |
| - * bean via {@link #wrapIfNecessary(Object, String)}. |
| 57 | + * bean via {@link #wrapBeanIfNecessary(Object, String)}. |
66 | 58 | */
|
67 |
| - void registerWrappingBeanOverrideHandler(BeanOverrideHandler handler, String beanName) { |
68 |
| - this.wrappingBeanOverrideHandlers.put(beanName, handler); |
| 59 | + void registerBeanOverrideHandler(BeanOverrideHandler handler, String beanName) { |
| 60 | + this.handlerToBeanNameMap.put(handler, beanName); |
| 61 | + if (handler.getStrategy() == BeanOverrideStrategy.WRAP) { |
| 62 | + this.wrappingBeanOverrideHandlers.put(beanName, handler); |
| 63 | + } |
69 | 64 | }
|
70 | 65 |
|
71 | 66 | /**
|
72 |
| - * Check {@linkplain #registerWrappingBeanOverrideHandler(BeanOverrideHandler, String) |
73 |
| - * wrapping handler} records and use the corresponding {@link BeanOverrideHandler} |
74 |
| - * to create an override instance by wrapping the provided bean, if relevant. |
| 67 | + * Use the registered {@linkplain BeanOverrideStrategy#WRAP "wrapping"} |
| 68 | + * {@link BeanOverrideHandler} to create an override instance by wrapping the |
| 69 | + * supplied bean. |
| 70 | + * <p>If no suitable {@code BeanOverrideHandler} has been registered, this |
| 71 | + * method returns the supplied bean unmodified. |
| 72 | + * @see #registerBeanOverrideHandler(BeanOverrideHandler, String) |
75 | 73 | */
|
76 |
| - Object wrapIfNecessary(Object bean, String beanName) throws BeansException { |
77 |
| - BeanOverrideHandler handler = this.wrappingBeanOverrideHandlers.get(beanName); |
78 |
| - if (handler != null && handler.getStrategy() == BeanOverrideStrategy.WRAP) { |
79 |
| - bean = handler.createOverrideInstance(beanName, null, bean); |
80 |
| - handler.trackOverrideInstance(bean, this.beanFactory); |
| 74 | + Object wrapBeanIfNecessary(Object bean, String beanName) { |
| 75 | + if (!this.wrappingBeanOverrideHandlers.containsKey(beanName)) { |
| 76 | + return bean; |
81 | 77 | }
|
| 78 | + BeanOverrideHandler handler = this.wrappingBeanOverrideHandlers.get(beanName); |
| 79 | + Assert.state(handler != null, |
| 80 | + () -> "Failed to find wrapping BeanOverrideHandler for bean '" + beanName + "'"); |
| 81 | + bean = handler.createOverrideInstance(beanName, null, bean); |
| 82 | + handler.trackOverrideInstance(bean, this.beanFactory); |
82 | 83 | return bean;
|
83 | 84 | }
|
84 | 85 |
|
85 | 86 | void inject(Object target, BeanOverrideHandler handler) {
|
86 |
| - String beanName = this.beanNameRegistry.get(handler); |
| 87 | + String beanName = this.handlerToBeanNameMap.get(handler); |
87 | 88 | Assert.state(StringUtils.hasLength(beanName),
|
88 | 89 | () -> "No bean found for BeanOverrideHandler: " + handler);
|
89 | 90 | inject(handler.getField(), target, beanName);
|
|
0 commit comments