簡體   English   中英

找到所有不是@Autowired的課程

[英]Find all classes that are not @Autowired

我有一個使用注釋的大型spring web應用程序。 但是,有些類使用@ component / service進行注釋,但不會從調用它們的位置進行自動裝配。 相反,使用新的運算符。

我想找出使用​​new運算符的所有用戶定義類的實例。

基本上,我創建了一個新的Http包裝類(spring組件),我從應用程序的多個位置調用它。 有些地方它的工作原理是因為它的自動連接是有效的,因為包含類和鏈開頭的類是由spring管理的。 但是有些地方它不起作用,因為調用鏈中的一個類是使用new實例化的,而不是Spring管理的。 所以我想解決這個問題並使這些類也被春季管理。

我說的是100多個課程,所以請建議一個可以在3-4個小時內完成的工具或方法,以防止人為錯誤。 我用eclipse。

例:

@Component
public class MyHttpClient {

    public int execute() {
        ...
    }
}

@Component
public class UtilC {

    @Autowired
    private MyHttpClient client;

    public int methodC() {
        // When methodC is called from A, it works
        // but when called from B, it gives NullPointerException
        client.execute();
    }
}

@Component
public class UtilB {

    private UtilC c = new UtilC();

    public int methodB() {
        c.methodC();
    }
}

@Component
public class UtilA {

    @Autowired
    private UtilC c;

    public int methodA() {
        c.methodC();
    }
}

請不要建議:

 @Component
 public class UtilC {

     @Autowired
     private MyHttpClient client;

     public int methodC() {
         try {
             client.execute();
         } catch(NullPointerException npe) {
             new MyHttpClient.execute();
         }
     }
 }

如何搜索所有已實例化的用戶定義類,如新的UtilC

使用Google反射查找使用@Autowired注釋的所有類

Reflections reflections = new Reflections("org.home.xxx");
Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(org.springframework.beans.factory.annotation.Autowired.class);

Set中沒有出現的類沒有注釋。

如果您有“使用注釋的大型Spring Web應用程序”,則必須使用正確的Java IDE。 每個IDE都有此功能,稱為“查找用法”(或類似的東西)。 你應該使用它。

例如,使用Intellij IDEA,我就是這樣做的:

  1. 找到Autowired接口(在源代碼中)。 使用“查找用法”。 在此輸入圖像描述
  2. 它應該顯示您的用途(很好的分類在各種用途的方面)。 在此輸入圖像描述

解決這個問題的一種方法是使用aspectj(編譯時編織)。 例如,以下方面允許編譯器為使用@XmlRootElement用法注釋的類的ctor創建錯誤(但在運行時,容器當然可以反射性地調用它)

import javax.xml.bind.annotation.XmlRootElement;

public aspect CtorError {

    declare error : call ((@XmlRootElement *).new(..)) : "ctor called";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM