package org.theonefx.wcframework.ioc; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Set; import org.theonefx.wcframework.core.ClassParseContext; import org.theonefx.wcframework.core.ClassParser; import org.theonefx.wcframework.core.ClassWrapper; import org.theonefx.wcframework.core.AbstractParserDelegate; import org.theonefx.wcframework.core.resource.ClassScanner; /** * @File : ClassScanParserDelegate.java * @ClassName : ClassScanParserDelegate * @Author : 陈曦 * @Date : 2012-2-6 上午09:08:48 * @Version : v1.0 * @Description : 类资源扫描器代理 */ public class ClassScanParserDelegate extends AbstractParserDelegate implements ClassParserRegister { private List<ClassParser> parsers = new ArrayList<ClassParser>(); private ClassScanner scanner = new ClassScanner(); public void parse(Collection<String> packages) { Iterator<String> iter = packages.iterator(); while (iter.hasNext()) { Set<Class<?>> classes = scanner.getPackageAllClasses(iter.next(), true); Iterator<Class<?>> classesIter = classes.iterator(); while (classesIter.hasNext()) { Class<?> clazz = classesIter.next(); parseClass(clazz); } } } public void parseClass(Class<?> clazz) { Iterator<ClassParser> iter = parsers.iterator(); ClassWrapper<?> wrapper = ClassWrapper.getWrapper(clazz); ClassParseContext context = new ClassParseContext(wrapper); while (iter.hasNext()) { ClassParser parser = iter.next(); parser.parse(wrapper, getRegistr(), context); } if (context.getDefinition() != null && !getRegistr().containsBeanDefinition(context.getId())) { getRegistr().registerBeanDefinition(context.getId(), context.getDefinition()); } } @Override public void regist(ClassParser parser) { parsers.add(parser); } }