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); } }