package ru.vyarus.dropwizard.guice.module.installer.install.binding; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * By default, all resolved extensions are registered in injector by {@code binder.bind(extType)}. * If extension installer implements * {@link ru.vyarus.dropwizard.guice.module.installer.install.binding.BindingInstaller} then installer manually * registers extension in context. * <p>Registering bean in context means that all singleton services will be instantiated on context start * (for production mode) </p> * <p>{@code @LazyBinding} allows omitting registration in simple case and will provide lazy hint for installer * with specific binding. Such lazy bean may be useful to defer bean creation: e.g. it is used somewhere as * dependency, but wrapped in {@code Provider}, so actual instance is not created immediately.</p> * <p>The best example for lazy beans is guice managed jersey extensions: due to the way jersey is integrated, * for some time guice context is not aware of HK beans, and the opposite. By making bean lazy, it's creation * moved from guice context start to actual usage by HK or jersey, when it can be created.</p> * * @author Vyacheslav Rusakov * @see ru.vyarus.dropwizard.guice.module.installer.install.binding.BindingInstaller * @see ru.vyarus.dropwizard.guice.module.jersey.GuiceFeature * @see ru.vyarus.dropwizard.guice.module.installer.feature.jersey.HK2Managed as alternative for jersey extensions * @since 21.11.2014 */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface LazyBinding { }