| /******************************************************************************* |
| * Copyright (c) 2010-present Sonatype, Inc. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Stuart McCulloch (Sonatype, Inc.) - initial API and implementation |
| *******************************************************************************/ |
| /** |
| * Customizable wiring of unresolved dependencies. Use this to share components across injectors, apply configuration, and form on-demand collections. |
| * <p><p> |
| * The {@link org.eclipse.sisu.wire.WireModule} should enclose all modules in your application: |
| * |
| * <pre> |
| * Guice.createInjector( new WireModule( bootModule, configModule, mainModule ) );</pre> |
| * |
| * Use the {@link org.eclipse.sisu.wire.ChildWireModule} when you want to wire child injectors: |
| * <p><p> |
| * <pre> |
| * injector.createChildInjector( new ChildWireModule( serviceModule, subModule ) );</pre> |
| * <hr> |
| * The default wiring strategy is to use {@link org.eclipse.sisu.wire.LocatorWiring} which can supply the following bindings via the {@link org.eclipse.sisu.inject.BeanLocator}: |
| * |
| * <h4>Instances</h4> |
| * <pre> |
| * @Inject MyType bean |
| * |
| * @Inject @Named("hint") MyType namedBean |
| * |
| * @Inject @MyQualifier MyType qualifiedBean |
| * |
| * @Inject Provider<MyType> beanProvider</pre> |
| * |
| * <h4>Configuration</h4> |
| * <pre> |
| * @Inject @Named("${my.property.name}") File file // supports basic type conversion |
| * |
| * @Inject @Named("${my.property.name:-http://example.org/}") URL url // can give default in case property is not set |
| * |
| * @Inject @Named("${my.property.name:-development}") MyType bean // can be used to pick specific @Named beans |
| * |
| * @Inject @Named("my.property.name") int port // shorthand syntax</pre> |
| * <p><p> |
| * You can bind your configuration at runtime as follows: |
| * <pre> |
| * bind( {@link org.eclipse.sisu.wire.ParameterKeys#PROPERTIES ParameterKeys.PROPERTIES} ).toInstance( myConfiguration ); // multiple bindings are merged into one view</pre> |
| * |
| * <h4>Collections</h4> |
| * The following collections are both dynamic and thread-safe, elements may come and go as injectors are added or removed from the {@link org.eclipse.sisu.inject.BeanLocator}. |
| * <p>They are also <b>lazy</b>, meaning instances are created as you access elements of the collection; the elements are then re-used for the same collection. |
| * <p></p> |
| * <pre> |
| * @Inject List<MyType> list |
| * |
| * @Inject List<Provider<MyType>> providers |
| * |
| * @Inject Iterable<{@link org.eclipse.sisu.BeanEntry}<MyQualifier, MyType>> entries // gives access to additional metadata</pre> |
| * |
| * <pre> |
| * @Inject Map<String, MyType> stringMap // strings are taken from @Named values |
| * |
| * @Inject Map<Named, MyType> namedMap |
| * |
| * @Inject Map<MyQualifier, MyType> qualifiedMap |
| * |
| * @Inject Map<String, Provider<MyType>> providerMap</pre> |
| */ |
| package org.eclipse.sisu.wire; |