请使用...Relections框架,我也是抄人家的代码...那个代码有问题,应该是路径问题,当你打包成jar了之后,你的整个系统已经处于一个类似于沙盒的环境,前三章给的代码,在idea环境里面用着没问题,但是打包之后就无法使用了,所以最好还是使用框架
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.10</version>
</dependency>
我们通常喜欢扫描实现了某个接口的对象然反射实例化它:
public static <T> Set<Class<? extends T>> getReflectionClass(Class<T> type){
Reflections reflections = new Reflections(new ConfigurationBuilder().forPackages("com.netty.controller").addScanners(new SubTypesScanner()).addScanners(new FieldAnnotationsScanner()));
Set<Class<? extends T>> subTypes = reflections.getSubTypesOf(type);
return subTypes;
}
这个是一个标准的调用格式
包名自定义之外,其他的不变就好
算了,重载一下吧
public static <T> Set<Class<? extends T>> getReflectionClass(Class<T> type,String packageName){
Reflections reflections = new Reflections(new ConfigurationBuilder().forPackages(packageName).addScanners(new SubTypesScanner()).addScanners(new FieldAnnotationsScanner()));
Set<Class<? extends T>> subTypes = reflections.getSubTypesOf(type);
return subTypes;
}
一个简单的反射生成实现接口的实例:
哎,贼坑...我特么意味netty和springboot联机就有问题,问题是之前也搞过没问题啊,原来他么的是老子反射的问题...算了,能用框架就用框架吧,尤其是商业项目,除非你有很牛逼的团队...