AnnotationConfigApplicationContext app = new AnnotationConfigApplicationContext(Apple.class); for (String s : app.getBeanDefinitionNames()) { System.out.println(s); } app.close();
※Apple.class 不管有沒有加 annotation 一定會有
※Apple.class
// @ComponentScan(excludeFilters = { @Filter(type = FilterType.ANNOTATION, classes = Component.class) }) // @ComponentScan(useDefaultFilters = false, includeFilters = { @Filter(type = FilterType.ANNOTATION, classes = Component.class) }) // @ComponentScan(excludeFilters = { @Filter(type = FilterType.ANNOTATION, classes = Repository.class) }) // @ComponentScan(useDefaultFilters = false, includeFilters = { @Filter(type = FilterType.ANNOTATION, classes = Controller.class) }) // @ComponentScan(useDefaultFilters = false, includeFilters = { @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = Chicken.class) }) @ComponentScan(useDefaultFilters = false, includeFilters = { @Filter(type = FilterType.CUSTOM, classes = MyTypeFilter.class) }) // @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = MyTypeFilter.class) })
※如果使用 includeFilters 時,一定要將 useDefaultFilters 設為 false,否則無效,表示只包括什麼
※第一個和第二個是有問題的,使用 excludeFilters 和 Component,結果是什麼都沒有;
使用 includeFilters 和 Component,結果是什麼都有
※
public class MyTypeFilter implements TypeFilter { @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { // System.out.println(metadataReader.getAnnotationMetadata().getAnnotationTypes()); // System.out.println(metadataReader.getClassMetadata().getClassName());// // package.class // System.out.println(metadataReader.getResource().getFilename());// name.class // System.out.println(metadataReaderFactory.getMetadataReader(metadataReader.getResource()).getAnnotationMetadata().getSuperClassName()); Set<String> set = metadataReader.getAnnotationMetadata().getAnnotationTypes(); if (new ArrayList<String>(set).contains("org.springframework.stereotype.Component")) { return false; } return true; } }
※使用這個 class,配合上面的 FilterType.CUSTOM,可以排除或包括 @Component
沒有留言:
張貼留言