3636 * @see MappingType
3737 */
3838@ RequiredArgsConstructor
39- public class MethodInvokerContainer implements Container <Object > {
39+ public abstract class MethodInvokerContainer implements Container <Object > {
4040
4141 /**
4242 * Namespace of method.
@@ -54,7 +54,7 @@ public class MethodInvokerContainer implements Container<Object> {
5454 * if method is static, this field can be null.
5555 */
5656 @ Nullable
57- private final Object target ;
57+ protected final Object target ;
5858
5959 /**
6060 * Create a standard method data source container.
@@ -69,7 +69,7 @@ public class MethodInvokerContainer implements Container<Object> {
6969 public static MethodInvokerContainer create (
7070 String namespace , MethodInvoker methodInvoker , @ Nullable Object target , boolean isMapped ) {
7171 return isMapped ? new NoMapping (namespace , methodInvoker , target )
72- : new MethodInvokerContainer (namespace , methodInvoker , target );
72+ : new StandardMethodInvokerContainer (namespace , methodInvoker , target );
7373 }
7474
7575 /**
@@ -120,53 +120,68 @@ public static MethodInvokerContainer oneToMany(
120120 }
121121
122122 /**
123- * Enter a batch of key values to return data source objects grouped by key values .
123+ * The container for method with single parameter .
124124 *
125- * @param keys keys
126- * @return data source objects grouped by key value
125+ * @author huangchengxing
127126 */
128- @ Override
129- public Map <Object , ?> get (Collection <Object > keys ) {
130- Object [] arguments = resolveArguments (keys );
131- Object result = methodInvoker .invoke (target , arguments );
132- if (Objects .isNull (result )) {
133- return Collections .emptyMap ();
127+ protected static class SingleKey extends MethodInvokerContainer {
128+
129+ public SingleKey (String namespace , MethodInvoker methodInvoker , @ Nullable Object target ) {
130+ super (namespace , methodInvoker , target );
134131 }
135- return resolveResult (keys , result );
136- }
137132
138- /**
139- * Resolve arguments.
140- *
141- * @param keys keys
142- * @return arguments
143- */
144- protected Object [] resolveArguments (Collection <Object > keys ) {
145- return new Object [] {keys };
133+ /**
134+ * Enter a batch of key values to return data source objects grouped by key values.
135+ *
136+ * @param keys keys
137+ * @return data source objects grouped by key value
138+ */
139+ @ Override
140+ public Map <Object , ?> get (Collection <Object > keys ) {
141+ Map <Object , Object > results = new HashMap <>(keys .size ());
142+ keys .forEach (key -> {
143+ Object result = methodInvoker .invoke (target , key );
144+ results .put (key , result );
145+ });
146+ return results ;
147+ }
146148 }
147149
148150 /**
149- * Resolve result to map .
151+ * Standard method data source container .
150152 *
151- * @param keys keys
152- * @param result result
153- * @return map
153+ * @author huangchengxing
154154 */
155- protected Map <Object , ?> resolveResult (Collection <Object > keys , Object result ) {
156- Collection <?> results = CollectionUtils .adaptObjectToCollection (result );
157- Map <Object , Object > resultMap = new HashMap <>(keys .size ());
158- Iterator <?> valueIterator = results .iterator ();
159- for (Object key : keys ) {
160- Object value = valueIterator .hasNext () ? valueIterator .next () : null ;
161- resultMap .put (key , value );
155+ protected static class StandardMethodInvokerContainer extends MethodInvokerContainer {
156+
157+ public StandardMethodInvokerContainer (String namespace , MethodInvoker methodInvoker , @ Nullable Object target ) {
158+ super (namespace , methodInvoker , target );
162159 }
163- return resultMap ;
164- }
165160
166- protected static class SingleKey extends MethodInvokerContainer {
161+ /**
162+ * Enter a batch of key values to return data source objects grouped by key values.
163+ *
164+ * @param keys keys
165+ * @return data source objects grouped by key value
166+ */
167+ @ Override
168+ public Map <Object , ?> get (Collection <Object > keys ) {
169+ Object [] arguments = resolveArguments (keys );
170+ Object result = methodInvoker .invoke (target , arguments );
171+ if (Objects .isNull (result )) {
172+ return Collections .emptyMap ();
173+ }
174+ return resolveResult (keys , result );
175+ }
167176
168- public SingleKey (String namespace , MethodInvoker methodInvoker , @ Nullable Object target ) {
169- super (namespace , methodInvoker , target );
177+ /**
178+ * Resolve arguments.
179+ *
180+ * @param keys keys
181+ * @return arguments
182+ */
183+ protected Object [] resolveArguments (Collection <Object > keys ) {
184+ return new Object [] {keys };
170185 }
171186
172187 /**
@@ -176,9 +191,15 @@ public SingleKey(String namespace, MethodInvoker methodInvoker, @Nullable Object
176191 * @param result result
177192 * @return map
178193 */
179- @ Override
180194 protected Map <Object , ?> resolveResult (Collection <Object > keys , Object result ) {
181- return Collections .singletonMap (CollectionUtils .getFirstNotNull (keys ), result );
195+ Collection <?> results = CollectionUtils .adaptObjectToCollection (result );
196+ Map <Object , Object > resultMap = new HashMap <>(keys .size ());
197+ Iterator <?> valueIterator = results .iterator ();
198+ for (Object key : keys ) {
199+ Object value = valueIterator .hasNext () ? valueIterator .next () : null ;
200+ resultMap .put (key , value );
201+ }
202+ return resultMap ;
182203 }
183204 }
184205
@@ -187,7 +208,7 @@ public SingleKey(String namespace, MethodInvoker methodInvoker, @Nullable Object
187208 *
188209 * @since 2.4.0
189210 */
190- protected static class NoMapping extends MethodInvokerContainer {
211+ protected static class NoMapping extends StandardMethodInvokerContainer {
191212
192213 public NoMapping (String namespace , MethodInvoker methodInvoker , @ Nullable Object target ) {
193214 super (namespace , methodInvoker , target );
@@ -212,7 +233,7 @@ public NoMapping(String namespace, MethodInvoker methodInvoker, @Nullable Object
212233 *
213234 * @since 2.4.0
214235 */
215- protected static class OneToOne extends MethodInvokerContainer {
236+ protected static class OneToOne extends StandardMethodInvokerContainer {
216237
217238 protected final KeyExtractor keyExtractor ;
218239 private final DuplicateStrategy duplicateStrategy ;
@@ -249,7 +270,7 @@ public OneToOne(
249270 *
250271 * @since 2.4.0
251272 */
252- protected static class OneToMany extends MethodInvokerContainer {
273+ protected static class OneToMany extends StandardMethodInvokerContainer {
253274
254275 private final KeyExtractor keyExtractor ;
255276
0 commit comments