public void observeProducer(@Observes ProcessProducer<MassProducer, Bar> event) { if (isProducerWithAnnotation(event, Some.SomeLiteral.INSTANCE)) { // Bar producer with @Some - change create/dispose event.configureProducer().disposeWith(new Consumer<Bar>() { @Override public void accept(Bar t) { disposerCalled.set(true); } }).produceWith(new Function<CreationalContext<Bar>, Bar>() { @Override public Bar apply(CreationalContext<Bar> t) { producerCalled.set(true); return new Bar(new ParameterInjectedBean(null)); } }); } }
<T extends com.codahale.metrics.Metric> void decorateMetricProducer(@Observes ProcessProducer<?, T> pp, BeanManager manager) { if (pp.getAnnotatedMember().isAnnotationPresent(Metric.class)) { String name = pp.getAnnotatedMember().getAnnotation(Metric.class).name(); Producer<T> producer = pp.getProducer(); pp.configureProducer().produceWith(context -> { MetricRegistry registry = manager.createInstance().select(MetricRegistry.class).get(); if (registry.getMetrics().containsKey(name)) return (T) registry.getMetrics().get(name); return registry.register(name, producer.produce(context)); }); } }