package org.theonefx.wcframework.ioc;
import java.util.Collection;
import org.theonefx.wcframework.core.exception.BeansException;
import org.theonefx.wcframework.ioc.exception.CannotEnsureBeanException;
import org.theonefx.wcframework.ioc.exception.NoSuchBeanException;
public class DefaultBeanFactory extends AbstractBeanFactory {
@Override
public Object getBean(String id) throws BeansException {
return doGetBean(id, null);
}
@Override
public <T> T getBean(String id, Class<T> requiredType) throws BeansException {
return doGetBean(id, requiredType);
}
@Override
public boolean containsBean(Class<?> requiredType) {
return containBeanType(requiredType);
}
@Override
public boolean containsBean(String id) {
return containsBeanDefinition(id);
}
@Override
public boolean isSingleton(String id) throws NoSuchBeanException {
return getBeanDefinition(id).isSingleton();
}
@Override
public boolean isPrototype(String id) throws NoSuchBeanException {
return getBeanDefinition(id).isPrototype();
}
@Override
public boolean isTypeMatch(String id, Class<?> targetType) throws NoSuchBeanException {
return targetType.isAssignableFrom(getType(id));
}
@Override
public Class<?> getType(String id) {
return resolveBeanClass(getMergedBeanDefinition(id), id);
}
@Override
public <T> T getBean(Class<T> requiredType) throws BeansException {
Collection<String> ids = getBeanDefinitionByType(requiredType);
if (ids == null || ids.size() == 0) {
throw new NoSuchBeanException("请求的TYPE:" + requiredType.getName());
} else if (ids.size() > 1) {
throw new CannotEnsureBeanException("请求的Type有多个Bean,Type:" + requiredType.getName());
}
return getBean(ids.iterator().next(), requiredType);
}
}