@Test public void excludeFilterWithScan() { ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true); provider.setResourceLoader(new DefaultResourceLoader( CandidateComponentsTestClassLoader.disableIndex(getClass().getClassLoader()))); provider.addExcludeFilter(new RegexPatternTypeFilter(Pattern.compile(TEST_BASE_PACKAGE + ".*Named.*"))); testExclude(provider, ScannedGenericBeanDefinition.class); }
@Test public void excludeFilterWithIndex() { ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true); provider.setResourceLoader(new DefaultResourceLoader(TEST_BASE_CLASSLOADER)); provider.addExcludeFilter(new RegexPatternTypeFilter(Pattern.compile(TEST_BASE_PACKAGE + ".*Named.*"))); testExclude(provider, AnnotatedGenericBeanDefinition.class); }
private void testCustomSupportedIncludeAndExcludeFilter(ClassPathScanningCandidateComponentProvider provider, Class<? extends BeanDefinition> expectedBeanDefinitionType) { provider.addIncludeFilter(new AnnotationTypeFilter(Component.class)); provider.addExcludeFilter(new AnnotationTypeFilter(Service.class)); provider.addExcludeFilter(new AnnotationTypeFilter(Repository.class)); Set<BeanDefinition> candidates = provider.findCandidateComponents(TEST_BASE_PACKAGE); assertTrue(containsBeanClass(candidates, NamedComponent.class)); assertTrue(containsBeanClass(candidates, ServiceInvocationCounter.class)); assertTrue(containsBeanClass(candidates, BarComponent.class)); assertEquals(3, candidates.size()); assertBeanDefinitionType(candidates, expectedBeanDefinitionType); }
@Nullable private BeanDefinition getCustomConversions(Element element, ParserContext parserContext) { List<Element> customConvertersElements = DomUtils.getChildElementsByTagName(element, "custom-converters"); if (customConvertersElements.size() == 1) { Element customerConvertersElement = customConvertersElements.get(0); ManagedList<BeanMetadataElement> converterBeans = new ManagedList<>(); List<Element> converterElements = DomUtils.getChildElementsByTagName(customerConvertersElement, "converter"); if (converterElements != null) { for (Element listenerElement : converterElements) { converterBeans.add(parseConverter(listenerElement, parserContext)); } } // Scan for Converter and GenericConverter beans in the given base-package String packageToScan = customerConvertersElement.getAttribute(BASE_PACKAGE); if (StringUtils.hasText(packageToScan)) { ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true); provider.addExcludeFilter(new NegatingFilter(new AssignableTypeFilter(Converter.class), new AssignableTypeFilter(GenericConverter.class))); converterBeans.addAll(provider.findCandidateComponents(packageToScan)); } BeanDefinitionBuilder conversionsBuilder = BeanDefinitionBuilder.rootBeanDefinition(MongoCustomConversions.class); conversionsBuilder.addConstructorArgValue(converterBeans); AbstractBeanDefinition conversionsBean = conversionsBuilder.getBeanDefinition(); conversionsBean.setSource(parserContext.extractSource(element)); parserContext.registerBeanComponent(new BeanComponentDefinition(conversionsBean, "customConversions")); return conversionsBean; } return null; }
@Test public void testWithComponentAnnotationOnly() { ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false); provider.addIncludeFilter(new AnnotationTypeFilter(Component.class)); provider.addExcludeFilter(new AnnotationTypeFilter(Repository.class)); provider.addExcludeFilter(new AnnotationTypeFilter(Service.class)); provider.addExcludeFilter(new AnnotationTypeFilter(Controller.class)); Set<BeanDefinition> candidates = provider.findCandidateComponents(TEST_BASE_PACKAGE); assertEquals(3, candidates.size()); assertTrue(containsBeanClass(candidates, NamedComponent.class)); assertTrue(containsBeanClass(candidates, ServiceInvocationCounter.class)); assertTrue(containsBeanClass(candidates, BarComponent.class)); assertFalse(containsBeanClass(candidates, FooServiceImpl.class)); assertFalse(containsBeanClass(candidates, StubFooDao.class)); assertFalse(containsBeanClass(candidates, NamedStubDao.class)); }
@Test public void testExcludeTakesPrecedence() { ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false); provider.addIncludeFilter(new AnnotationTypeFilter(Component.class)); provider.addIncludeFilter(new AssignableTypeFilter(FooServiceImpl.class)); provider.addExcludeFilter(new AssignableTypeFilter(FooService.class)); Set<BeanDefinition> candidates = provider.findCandidateComponents(TEST_BASE_PACKAGE); assertEquals(6, candidates.size()); assertTrue(containsBeanClass(candidates, NamedComponent.class)); assertTrue(containsBeanClass(candidates, ServiceInvocationCounter.class)); assertTrue(containsBeanClass(candidates, BarComponent.class)); assertFalse(containsBeanClass(candidates, FooServiceImpl.class)); }
private void populateTriggerVOs() throws ClassNotFoundException { ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(true); scanner.addIncludeFilter(new AnnotationTypeFilter(TriggerIndex.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Controller.class)); for (String pkg : getBasePkgNames()) { for (BeanDefinition bd : scanner.findCandidateComponents(pkg)) { Class<?> triggerVO = Class.forName(bd.getBeanClassName()); if (!triggerVO.isAnnotationPresent(Entity.class)) { throw new IllegalArgumentException(String.format("Class[%s] is annotated by @TriggerIndex, but not annotated by @Entity", triggerVO.getName())); } triggerVOs.add(triggerVO); popluateTriggerVONamesCascade(triggerVO); } } }
private void generateInventoryPythonClass(StringBuilder sb, List<String> basePkgs) { List<String> inventoryPython = new ArrayList<>(); ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false); scanner.addIncludeFilter(new AnnotationTypeFilter(PythonClassInventory.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Component.class)); for (String pkg : basePkgs) { for (BeanDefinition bd : scanner.findCandidateComponents(pkg).stream().sorted((bd1, bd2) -> { return bd1.getBeanClassName().compareTo(bd2.getBeanClassName()); }).collect(Collectors.toList())) { try { Class<?> clazz = Class.forName(bd.getBeanClassName()); if (isPythonClassGenerated(clazz)) { /* This class was generated as other's parent class */ continue; } inventoryPython.add(classToInventoryPythonClass(clazz)); } catch (Exception e) { logger.warn(String.format("Unable to generate python class for %s", bd.getBeanClassName()), e); } } } for (String invstr : inventoryPython) { sb.append(invstr); } }
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false); scanner.addIncludeFilter(new AnnotationTypeFilter(Inventory.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Controller.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Component.class)); for (String pkg : basePkgs) { for (BeanDefinition bd : scanner.findCandidateComponents(pkg)) {
private void populateInventoryIndexer() throws URISyntaxException, ClassNotFoundException, NoSuchMethodException { ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(true); scanner.addIncludeFilter(new AnnotationTypeFilter(Inventory.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Controller.class)); for (String pkg : getBasePkgNames()) { for (BeanDefinition bd : scanner.findCandidateComponents(pkg)) { Class<?> inventoryClass = Class.forName(bd.getBeanClassName()); Inventory invat = inventoryClass.getAnnotation(Inventory.class); if (!triggerVOs.contains(invat.mappingVOClass())) { String err = String.format("Inventory[%s]'s mapping VO class[%s] is not annotated by @TriggerIndex", inventoryClass.getName(), invat .mappingVOClass().getName()); throw new IllegalArgumentException(err); } String mappingClassSimpleName = invat.mappingVOClass().getSimpleName(); IndexerInfo info = voClassToIndexerMapping.get(mappingClassSimpleName); if (info == null) { String invName = inventoryClass.getSimpleName(); info = new IndexerInfo(); info.url = String.format("%s/%s/%s", elasticSearchBaseUrl, invName.toLowerCase(), invName); info.inventoryClass = inventoryClass; info.inventoryName = invName; info.mappingVOClass = invat.mappingVOClass(); info.valueOfMethod = getValueOfMethodOfInventoryClass(inventoryClass); info.entityIdField = getEntityIdFieldFromClass(info.mappingVOClass); info.entityIdField.setAccessible(true); voClassToIndexerMapping.put(mappingClassSimpleName, info); } } } }
scanner.addExcludeFilter(new AnnotationTypeFilter(NoPython.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Component.class)); for (String pkg : basePkgs) { List<Class<?>> clazzList = new ArrayList<>();
scanner.addIncludeFilter(new AssignableTypeFilter(APIMessage.class)); scanner.addIncludeFilter(new AssignableTypeFilter(APIReply.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Controller.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(NoPython.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Component.class)); List<String> apiNames = new ArrayList<>(100); for (String pkg : basePkgs) {
private void handle(APIGenerateSqlVOViewMsg msg) { try { ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(true); scanner.addIncludeFilter(new AnnotationTypeFilter(EO.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Controller.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Component.class)); StringBuilder sb = new StringBuilder(); for (String pkg : msg.getBasePackageNames()) { for (BeanDefinition bd : scanner.findCandidateComponents(pkg)) { Class<?> entityClazz = Class.forName(bd.getBeanClassName()); generateVOViewSql(sb, entityClazz); } } String exportPath = PathUtil.join(System.getProperty("user.home"), "zstack-mysql-view"); FileUtils.deleteDirectory(new File(exportPath)); File folder = new File(exportPath); folder.mkdirs(); File outfile = new File(PathUtil.join(exportPath, "view.sql")); FileUtils.writeStringToFile(outfile, sb.toString()); APIGenerateSqlVOViewEvent evt = new APIGenerateSqlVOViewEvent(msg.getId()); bus.publish(evt); } catch (Exception e) { throw new CloudRuntimeException(e); } }
scanner.addIncludeFilter(new AssignableTypeFilter(APIReply.class)); scanner.addIncludeFilter(new AssignableTypeFilter(APIMessage.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Controller.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Component.class)); for (String pkg : basePkgs) { for (BeanDefinition bd : scanner.findCandidateComponents(pkg)) {
private void generateApiMessageGroovyClass(StringBuilder sb, List<String> basePkgs) { ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(true); scanner.addIncludeFilter(new AssignableTypeFilter(APIMessage.class)); scanner.addIncludeFilter(new AssignableTypeFilter(APIReply.class)); scanner.addIncludeFilter(new AssignableTypeFilter(APIEvent.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Controller.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Component.class)); for (String pkg : basePkgs) { for (BeanDefinition bd : scanner.findCandidateComponents(pkg)) { try { Class<?> clazz = Class.forName(bd.getBeanClassName()); //classToApiMessageGroovyClass(sb, clazz); classToApiMessageGroovyInformation(sb, clazz); } catch (ClassNotFoundException e) { logger.warn(String.format("Unable to generate groovy class for %s", bd.getBeanClassName()), e); } } } }
scanner.addExcludeFilter(typeFilter);
@Nullable private BeanDefinition getCustomConversions(Element element, ParserContext parserContext) { List<Element> customConvertersElements = DomUtils.getChildElementsByTagName(element, "custom-converters"); if (customConvertersElements.size() == 1) { Element customerConvertersElement = customConvertersElements.get(0); ManagedList<BeanMetadataElement> converterBeans = new ManagedList<>(); List<Element> converterElements = DomUtils.getChildElementsByTagName(customerConvertersElement, "converter"); if (converterElements != null) { for (Element listenerElement : converterElements) { converterBeans.add(parseConverter(listenerElement, parserContext)); } } // Scan for Converter and GenericConverter beans in the given base-package String packageToScan = customerConvertersElement.getAttribute(BASE_PACKAGE); if (StringUtils.hasText(packageToScan)) { ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true); provider.addExcludeFilter(new NegatingFilter(new AssignableTypeFilter(Converter.class), new AssignableTypeFilter(GenericConverter.class))); converterBeans.addAll(provider.findCandidateComponents(packageToScan)); } BeanDefinitionBuilder conversionsBuilder = BeanDefinitionBuilder.rootBeanDefinition(MongoCustomConversions.class); conversionsBuilder.addConstructorArgValue(converterBeans); AbstractBeanDefinition conversionsBean = conversionsBuilder.getBeanDefinition(); conversionsBean.setSource(parserContext.extractSource(element)); parserContext.registerBeanComponent(new BeanComponentDefinition(conversionsBean, "customConversions")); return conversionsBean; } return null; }
scanner.addIncludeFilter(new AnnotationTypeFilter(SqlTrigger.class)); scanner.addIncludeFilter(new AnnotationTypeFilter(SqlTriggers.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Controller.class)); for (String pkg : getBasePkgNames()) { for (BeanDefinition bd : scanner.findCandidateComponents(pkg)) { scanner.addIncludeFilter(new AnnotationTypeFilter(SqlTrigger.class)); scanner.addIncludeFilter(new AnnotationTypeFilter(SqlTriggers.class)); scanner.addExcludeFilter(new AnnotationTypeFilter(Controller.class)); for (String pkg : getBasePkgNames()) { for (BeanDefinition bd : scanner.findCandidateComponents(pkg)) {
public void setExcludeAnnotation(Class<? extends Annotation> annotation) { super.addExcludeFilter(new AnnotationTypeFilter(annotation)); }
private Set<BeanDefinition> findCandidateBeanDefinitions(ImplementationDetectionConfiguration config) { String postfix = config.getImplementationPostfix(); ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false, environment); provider.setResourceLoader(resourceLoader); provider.setResourcePattern(String.format(CUSTOM_IMPLEMENTATION_RESOURCE_PATTERN, postfix)); provider.setMetadataReaderFactory(config.getMetadataReaderFactory()); provider.addIncludeFilter((reader, factory) -> true); config.getExcludeFilters().forEach(it -> provider.addExcludeFilter(it)); return config.getBasePackages().stream()// .flatMap(it -> provider.findCandidateComponents(it).stream())// .collect(Collectors.toSet()); }