in wicket-guice/src/main/java/org/apache/wicket/guice/GuiceFieldValueFactory.java [57:116]
public Object getFieldValue(final Field field, final Object fieldOwner)
{
Object target = null;
if (supportsField(field))
{
Inject injectAnnotation = field.getAnnotation(Inject.class);
jakarta.inject.Inject jakartaInjectAnnotation = field.getAnnotation(jakarta.inject.Inject.class);
if (!Modifier.isStatic(field.getModifiers()) && (injectAnnotation != null || jakartaInjectAnnotation != null))
{
try
{
boolean optional = injectAnnotation != null && injectAnnotation.optional();
Annotation bindingAnnotation = findBindingAnnotation(field.getAnnotations());
final GuiceProxyTargetLocator locator = new GuiceProxyTargetLocator(field, bindingAnnotation, optional);
Object cachedValue = cache.get(locator);
if (cachedValue != null)
{
return cachedValue == NULL_SENTINEL ? null : cachedValue;
}
target = locator.locateProxyTarget();
if (target == null)
{
// Optional without a binding, return null
}
else
{
if (wrapInProxies)
{
target = LazyInitProxyFactory.createProxy(field.getType(), locator);
}
}
if (locator.isSingletonScope())
{
Object tmpTarget = cache.putIfAbsent(locator, target == null ? NULL_SENTINEL : target);
if (tmpTarget != null)
{
target = tmpTarget;
}
}
if (!field.canAccess(fieldOwner))
{
field.setAccessible(true);
}
}
catch (MoreThanOneBindingException e)
{
throw new RuntimeException(
"Can't have more than one BindingAnnotation on field " + field.getName() +
" of class " + fieldOwner.getClass().getName());
}
}
}
return target == NULL_SENTINEL ? null : target;
}