卜若的代碼筆記-java編程技巧-第四章:反射基礎(4)->關於前面三章提供的反射代碼無法在jar中正常使用的解釋

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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章