@NotNull public Set<String> detectPackagesToScan(String[] basePackages) { Assert.notNull(applicationContext, "applicationContext 不能为null"); Set<String> packages = new HashSet<>(); if (basePackages.length == 0) { for (Object o : applicationContext.getBeansWithAnnotation(ComponentScan.class).values()) { ComponentScan annotation = AnnotatedElementUtils .findMergedAnnotation(o.getClass(), ComponentScan.class); for (Class<?> aClass : annotation.basePackageClasses()) { packages.add(aClass.getPackage().getName()); } packages.addAll(Arrays.asList(annotation.basePackages())); if (packages.isEmpty()) { packages.add(o.getClass().getPackage().getName()); } } } else { packages.addAll(Arrays.asList(basePackages)); } return packages; }
@NotNull public static Set<String> detectPackagesToScan(ApplicationContext applicationContext, String[] basePackages) { Assert.notNull(applicationContext, "applicationContext 不能为null"); Set<String> packages = new HashSet<>(); if (basePackages.length == 0) { for (Object o : applicationContext.getBeansWithAnnotation(ComponentScan.class).values()) { ComponentScan annotation = AnnotatedElementUtils .findMergedAnnotation(o.getClass(), ComponentScan.class); for (Class<?> aClass : annotation.basePackageClasses()) { packages.add(aClass.getPackage().getName()); } packages.addAll(Arrays.asList(annotation.basePackages())); if (packages.isEmpty()) { packages.add(o.getClass().getPackage().getName()); } } } else { packages.addAll(Arrays.asList(basePackages)); } return packages; }
private List<String> lookupBasePackages(BeanDefinitionRegistry registry) { List<String> packages = new ArrayList<String>(); String[] names = registry.getBeanDefinitionNames(); for (int i = 0; i < names.length; i++) { String beanName = names[i]; BeanDefinition definition = registry.getBeanDefinition(beanName); String clazzName = definition.getBeanClassName(); if (StringKit.isBlank(clazzName)) { continue; } Class<?> clazz = ClassKit.forName(clazzName); ComponentScan anno = clazz.getAnnotation(ComponentScan.class); if (anno != null) { String[] basePackages = anno.basePackages(); for (String pkg : basePackages) { packages.add(pkg); } } } return packages; }
packages.add(p); for (String p : scan.basePackages()) { packages.add(p);
private static void addBasePackages(Set<String> bps, ComponentScan a) { if(null == a) { return; } Collections2.addAll(bps, a.value()); Collections2.addAll(bps, a.basePackages()); for(Class<?> c : a.basePackageClasses()){ bps.add(ClassUtils.getPackageName(c)); } }
for (String pkg : componentScan.basePackages()) { if (StringUtils.hasText(pkg)) { basePackages.add(pkg);