docs: public <T> T component(final Target target) {
  		logger.debug("Component is requested with target: Target [" + target + "]");
  		Collection<Descriptor<?>> descriptors = new ArrayList<>();
  		Class<?> deployment = deployment();
  		Type type = target.type();
  		
  		for (Descriptor<?> descriptor : components.get(
  				(type instanceof ParameterizedType) ? (Class<?>) ((ParameterizedType) type).getRawType() : (Class<?>) type)) {
  			Set<Class<? extends Annotation>> deployments = descriptor.deployments();
  			
  			if (deployments.isEmpty() || deployment == null
  					|| (deployment != null && deployments.contains(deployment))) {
  				descriptors.add(descriptor);
  			}
  		}
  		
  		if (descriptors.isEmpty()) {
  			logger.warn("No component returned: Current deployment [" 
  					+ ((deployment == null) ? deployment : deployment.getSimpleName())
  					+ "]; Target [" + target 
  					+ "]; You must install an appropriate component on ahead "
  					+ "invoking [public <T> void install(Class<T> component)]");
  			return null;
  		}
  		
  		final Set<Annotation> bindings = new HashSet<>();
  		
  		for (Annotation qualifier : target.qualifiers()) {
  			if (qualifier.annotationType().isAnnotationPresent(Binding.class)) {
  				bindings.add(qualifier);
  			}
  		}
  		
  		descriptors = Collections2.filter(descriptors, new Predicate<Descriptor<?>>() {
  
  			public boolean apply(Descriptor<?> descriptor) {
  				return Sets.difference(bindings, descriptor.bindings()).size() == 0;
  			}
  			
  		});
  		
  		if (descriptors.isEmpty()) {
  			logger.warn("Component is missing: Target [" + target 
  					+ "]; You must specify binding annotations on the field correctly");
  			return null;
  		} else if (descriptors.size() == 1) {
  			return instance(component(descriptors.toArray(new Descriptor<?>[1])[0]), target);
  		} else {
  			descriptors = Collections2.filter(descriptors, new Predicate<Descriptor<?>>() {
  
  				public boolean apply(Descriptor<?> descriptor) {
  					for (Annotation binding : descriptor.bindings()) {
  						if (binding.annotationType().equals(Default.class)) {
  							return true;
  						}
  					}
  					
  					return false;
  				}
  				
  			});
  			
  			if (descriptors.size() == 1) {
  				Descriptor<?> descriptor = descriptors.toArray(new Descriptor<?>[1])[0];
  				logger.debug("@Default qualified component [" + descriptor + "] is returned in preference");
  				return instance(component(descriptor), target);
  			} else {
  				logger.warn("Component is duplicated: Target [" + target
  						+ "]; You must specify more concrete type " 
  						+ "or binding annotations strictly");
  				return null;
  			}
  		}
  	}