請使用...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聯機就有問題,問題是之前也搞過沒問題啊,原來他麼的是老子反射的問題...算了,能用框架就用框架吧,尤其是商業項目,除非你有很牛逼的團隊...