代码拉取完成,页面将自动刷新
同步操作将从 Cent/class-scanner 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
class-scanner为一个Java类扫描器,用于获取指定包下的Class类,同时可根据指定Annotation进行过滤。
实现功能:
class-scanner
由于项目并没有上传Maven中央仓库,使用的是码云项目托管,故需要在项目的仓库配置中增加以下配置:
<repositories>
<repository>
<id>cent-repo</id>
<url>https://gitee.com/centy/maven/raw/master</url>
</repository>
</repositories>
在项目添加以下依赖包:
<dependency>
<groupId>org.cent</groupId>
<artifactId>scanner-core</artifactId>
<version>1.0.1-SNAPSHOT</version>
</dependency>
可参考以下测试用例代码:
package org.cent.scanner.core.scanner;
import lombok.extern.slf4j.Slf4j;
import org.cent.scanner.core.anno.Scannable;
import org.cent.scanner.core.callback.ScannerCallback;
import org.cent.scanner.core.scanner.impl.DefaultClassScanner;
import org.junit.Test;
import sun.jvm.hotspot.utilities.Assert;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Arrays;
import java.util.List;
@Scannable
@ClassScannerTestCase.CustomScannable
@Slf4j
public class ClassScannerTestCase {
private final List<String> scanPkgs = Arrays.asList(
"org", "lombok", "com.sun", "javax"
);
private ClassScanner classScanner = new DefaultClassScanner();
/**
* 测试用例:扫描多个包
*/
@Test
public void testScan() {
List<Class> classList = classScanner.scan(scanPkgs);
Assert.that(classList.size() > 0, "扫描失败,返回为空!");
log.info("共扫描到{}个类", classList.size());
}
/**
* 测试用例:扫描多个包下带有Scannable注解的类
*/
@Test
public void testScanByAnno() {
List<Class> classList = classScanner.scanByAnno(scanPkgs, Scannable.class);
Assert.that(classList.size() > 0, "扫描失败,返回为空!");
log.info("共扫描到{}个类", classList.size());
}
/**
* 测试用例:扫描多个包并执行callback方法
*/
@Test
public void testScanAndCallback() {
classScanner.scanAndCallback(scanPkgs, new TestCallback());
}
/**
* 测试用例:扫描多个包带有CustomScannable注解的类,并执行callback。
*/
@Test
public void testScanAndCallbackByAnno() {
classScanner.scanAndCallbackByAnno(scanPkgs, CustomScannable.class, new TestCallback());
}
/**
* callback方法
*/
@Slf4j
static class TestCallback implements ScannerCallback {
@Override
public void callback(List<Class> clzs) {
clzs.forEach(clz -> log.info(clz.getName()));
Assert.that(clzs.size() > 0, "扫描结果数量错误!");
}
}
/**
* 自定义注解
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
static @interface CustomScannable {
}
}
<dependency>
<groupId>org.cent</groupId>
<artifactId>scanner-spring-boot-starter</artifactId>
<version>1.0.1-SNAPSHOT</version>
</dependency>
a.开发回调函数
package org.cent.demo.scanner.callback;
import lombok.extern.slf4j.Slf4j;
import org.cent.scanner.core.callback.ScannerCallback;
import java.util.List;
@Slf4j
public class CustomCallback implements ScannerCallback {
@Override
public void callback(List<Class> list) {
list.forEach(clz -> {
log.info(clz.getName());
});
}
}
b.在application.yml中增加以下配置:
org:
scanner:
auto:
enable: true
callback: org.cent.demo.scanner.callback.CustomCallback
packages:
- org.cent
c.启动执行,输出如下
2019-01-16 15:53:50.713 INFO 4365 --- [ main] o.c.d.scanner.callback.CustomCallback : org.cent.demo.scanner.Application
2019-01-16 15:53:50.714 INFO 4365 --- [ main] o.c.d.scanner.callback.CustomCallback : org.cent.demo.scanner.callback.CustomCallback
2019-01-16 15:53:50.714 INFO 4365 --- [ main] o.c.d.scanner.callback.CustomCallback : org.cent.scanner.starter.prop.ScannerProp
2019-01-16 15:53:50.714 INFO 4365 --- [ main] o.c.d.scanner.callback.CustomCallback : org.cent.scanner.starter.config.ScannerAutoConfiguration
2019-01-16 15:53:50.714 INFO 4365 --- [ main] o.c.d.scanner.callback.CustomCallback : org.cent.scanner.starter.runner.AutoScanner
2019-01-16 15:53:50.714 INFO 4365 --- [ main] o.c.d.scanner.callback.CustomCallback : org.cent.scanner.core.util.URLUtil
2019-01-16 15:53:50.714 INFO 4365 --- [ main] o.c.d.scanner.callback.CustomCallback : org.cent.scanner.core.util.ScannerUtil
2019-01-16 15:53:50.714 INFO 4365 --- [ main] o.c.d.scanner.callback.CustomCallback : org.cent.scanner.core.util.EmptyUtil
2019-01-16 15:53:50.714 INFO 4365 --- [ main] o.c.d.scanner.callback.CustomCallback : org.cent.scanner.core.util.ScannerUtil$UrlScanCallable
2019-01-16 15:53:50.714 INFO 4365 --- [ main] o.c.d.scanner.callback.CustomCallback : org.cent.scanner.core.util.ClassUtil
2019-01-16 15:53:50.714 INFO 4365 --- [ main] o.c.d.scanner.callback.CustomCallback : org.cent.scanner.core.util.NamedThreadFactory
...
默认扫描器已初始化到Spring容器中,可直接通过依赖注入,其他使用同直接使用核心包。
@Autowired
private ClassScanner classScanner;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。