@Override public <T> Provider<T> provider(Injector injector, InjectionPoint<T> ip) { Var var = ip.annotation(Var.class); if (var == null) { return null; } String name = var.value(); if (name.isEmpty()) { name = ip.name(); } String defaultValue = var.defaultValue(); return new ProviderVar<T>((InjectorAmp) injector, (Class<T>) ip.key().type(), name, defaultValue); }
default <A extends Annotation> A annotation(Class<A> annType) { for (Annotation ann : annotations()) { if (ann.annotationType().equals(annType)) { return (A) ann; } } return null; }
/** * Create a program for method arguments. */ @Override public Provider<?> []program(Parameter []params) { Provider<?> []program = new Provider<?>[params.length]; for (int i = 0; i < program.length; i++) { //Key<?> key = Key.of(params[i]); program[i] = provider(InjectionPoint.of(params[i])); } return program; }
default <T> Provider<T> provider(Injector injector, InjectionPoint<T> ip) { return provider(injector, ip.key()); } }
@Service public Object service(InjectionPoint ip) Class<?> type = ip.key().rawClass(); Service service = findService(ip.annotations());
@Override public <T> Provider<T> provider(Injector manager, InjectionPoint<T> ip) { Service service = ip.annotation(Service.class); Class<T> rawClass = ip.key().rawClass(); if (service == null) { service = metaService(ip.key()); } if (service == null) { service = rawClass.getAnnotation(Service.class); } if (service == null) { return null; } String address = getManager().address(rawClass, service.value()); if (address != null && ! address.isEmpty()) { T proxy = getManager().service(address).as(rawClass); return ()->proxy; } else { return null; } }
/** * Create a provider based on registered auto-binders. */ private <T> Provider<T> autoProvider(InjectionPoint<T> ip) { for (InjectAutoBind autoBind : _autoBind) { Provider<T> provider = autoBind.provider(this, ip); if (provider != null) { return provider; } } return providerDefault(ip.key()); }
/** * Creates an instance provider for a given InjectionPoint, such as a * method or field. */ @Override public <T> Provider<T> provider(InjectionPoint<T> ip) { Objects.requireNonNull(ip); Provider<T> provider = lookupProvider(ip); if (provider != null) { return provider; } provider = autoProvider(ip); if (provider != null) { return provider; } return new ProviderNull(ip.key(), -10000, new InjectScopeSingleton()); }
@Override public Provider<T> provider() { return new ProviderInjectionPoint(InjectionPoint.of(_method)); }
/** * Create a provider for an injection point. */ private <T> Provider<T> lookupProvider(InjectionPoint<T> ip) { Key<T> key = ip.key(); BindingInject<T> bean = findBean(key); if (bean != null) { return bean.provider(ip); } BindingAmp<T> provider = findBinding(key); if (provider != null) { return provider.provider(ip); } provider = findObjectBinding(key); if (provider != null) { return provider.provider(ip); } return null; }
private void filterAfter(RouteBuilder builder, Method method, Annotation ann) { Class<?> annType = ann.annotationType(); for (FilterAfter after: annType.getAnnotationsByType(FilterAfter.class)) { Class<? extends ServiceWeb> typeAfter = after.value(); if (ServiceWeb.class.equals(typeAfter)) { builder.after(ann, InjectionPoint.of(method)); } else { builder.after(typeAfter); } } } }
/** * before */ private void filterBefore(RouteBuilder builder, Method method, Annotation ann) { Class<?> annType = ann.annotationType(); for (FilterBefore before : annType.getAnnotationsByType(FilterBefore.class)) { Class<? extends ServiceWeb> typeBefore = before.value(); if (ServiceWeb.class.equals(typeBefore)) { builder.before(ann, InjectionPoint.of(method)); } else { builder.before(typeBefore); } } }
/** * Search for a matching provider for a key. */ private <T> Provider<T> lookupProvider(Key<T> key) { BindingInject<T> bean = findBean(key); if (bean != null) { return bean.provider(); } BindingAmp<T> binding = findBinding(key); if (binding != null) { return binding.provider(); } binding = findObjectBinding(key); if (binding != null) { return binding.provider(InjectionPoint.of(key)); } return null; }