package org.dayatang.domain.internal.bean;
import org.dayatang.domain.InstanceLocator;
import org.dayatang.domain.InstanceProvider;
import org.dayatang.domain.IocInstanceNotFoundException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.annotation.Annotation;
/**
* Created by yyang on 15/1/14.
*/
public class InstanceProviderInstanceLocator implements InstanceLocator {
private static final Logger LOGGER = LoggerFactory.getLogger(InstanceProviderInstanceLocator.class);
private InstanceProvider instanceProvider;
public InstanceProviderInstanceLocator(InstanceProvider instanceProvider) {
this.instanceProvider = instanceProvider;
}
@Override
public <T> T getInstance(Class<T> beanType) {
try {
return instanceProvider.getInstance(beanType);
} catch (IocInstanceNotFoundException e) {
LOGGER.warn("InstanceProvider cannot found bean of type {}", beanType);
return null;
}
}
@Override
public <T> T getInstance(Class<T> beanType, String beanName) {
try {
return instanceProvider.getInstance(beanType, beanName);
} catch (IocInstanceNotFoundException e) {
LOGGER.warn("InstanceProvider cannot found bean '{}' of type {}", beanName, beanType);
return null;
}
}
@Override
public <T> T getInstance(Class<T> beanType, Class<? extends Annotation> annotationType) {
try {
return instanceProvider.getInstance(beanType, annotationType);
} catch (IocInstanceNotFoundException e) {
LOGGER.warn("InstanceProvider cannot found bean of type {} with annotation {}", beanType, annotationType);
return null;
}
}
}