• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

TAKETODAY / today-infrastructure / 18154768944

01 Oct 2025 07:26AM UTC coverage: 81.882% (-0.005%) from 81.887%
18154768944

push

github

web-flow
Merge pull request #290 from TAKETODAY/dev/jspecify

jspecify

59788 of 78013 branches covered (76.64%)

Branch coverage included in aggregate %.

141239 of 167496 relevant lines covered (84.32%)

3.6 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
today-context/src/main/java/infra/context/properties/bind/DataObjectBinder.java
1
/*
2
 * Copyright 2017 - 2025 the original author or authors.
3
 *
4
 * This program is free software: you can redistribute it and/or modify
5
 * it under the terms of the GNU General Public License as published by
6
 * the Free Software Foundation, either version 3 of the License, or
7
 * (at your option) any later version.
8
 *
9
 * This program is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 * GNU General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program. If not, see [https://www.gnu.org/licenses/]
16
 */
17

18
package infra.context.properties.bind;
19

20
import org.jspecify.annotations.Nullable;
21

22
import infra.context.properties.bind.Binder.Context;
23
import infra.context.properties.source.ConfigurationPropertyName;
24

25
/**
26
 * Internal strategy used by {@link Binder} to bind data objects. A data object is an
27
 * object composed itself of recursively bound properties.
28
 *
29
 * @author Phillip Webb
30
 * @author Madhura Bhave
31
 * @author <a href="https://github.com/TAKETODAY">Harry Yang</a>
32
 * @see JavaBeanBinder
33
 * @see ValueObjectBinder
34
 * @since 4.0
35
 */
36
interface DataObjectBinder {
37

38
  /**
39
   * Return a bound instance or {@code null} if the {@link DataObjectBinder} does not
40
   * support the specified {@link Bindable}.
41
   *
42
   * @param <T> the source type
43
   * @param name the name being bound
44
   * @param target the bindable to bind
45
   * @param context the bind context
46
   * @param propertyBinder property binder
47
   * @return a bound instance or {@code null}
48
   */
49
  @Nullable
50
  <T> T bind(ConfigurationPropertyName name, Bindable<T> target,
51
          Context context, DataObjectPropertyBinder propertyBinder);
52

53
  /**
54
   * Return a newly created instance or {@code null} if the {@link DataObjectBinder}
55
   * does not support the specified {@link Bindable}.
56
   *
57
   * @param <T> the source type
58
   * @param target the bindable to create
59
   * @param context the bind context
60
   * @return the created instance
61
   */
62
  @Nullable
63
  <T> T create(Bindable<T> target, Context context);
64

65
  /**
66
   * Callback that can be used to add additional suppressed exceptions when an instance
67
   * cannot be created.
68
   *
69
   * @param <T> the source type
70
   * @param target the bindable that was being created
71
   * @param context the bind context
72
   * @param exception the exception about to be thrown
73
   */
74
  default <T> void onUnableToCreateInstance(Bindable<T> target, Binder.Context context, RuntimeException exception) {
75
    // noop
76
  }
×
77

78
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc