in src/java/org/apache/turbine/annotation/AnnotationProcessor.java [574:619]
private static void injectTurbineService(Object object, ServiceManager manager, Field field, TurbineService annotation) throws TurbineException
{
String serviceName = null;
// Check for annotation value
if (annotation != null && StringUtils.isNotEmpty(annotation.value()))
{
serviceName = annotation.value();
}
// Check for fields SERVICE_NAME and ROLE
else
{
// check field level annotation
Field[] typeFields = field.getType().getFields();
serviceName = checkServiceOrRoleInField(serviceName, typeFields);
// if it is the default Service, we check class level annotation
if ( (serviceName == null || serviceName.equals(Service.SERVICE_NAME)) &&
field.getType().isAnnotationPresent(TurbineService.class)) {
TurbineService service = field.getType().getAnnotation(TurbineService.class);
log.debug("retrieved class annotation: "+ service);
serviceName = service.value();
}
}
if (StringUtils.isEmpty(serviceName))
{
// Try interface class name (e.g. used by Fulcrum)
serviceName = field.getType().getName();
}
log.debug("Looking up service for injection: {} for object {}", serviceName, object);
Object service = manager.getService(serviceName); // throws Exception on unknown service
field.setAccessible(true);
try
{
log.debug("Injection of {} into object {}", serviceName, object);
field.set(object, service);
}
catch (IllegalArgumentException | IllegalAccessException e)
{
throw new TurbineException("Could not inject service "
+ serviceName + " into object " + object, e);
}
}