所以我有一個設置軟件包,它是擴展應用程序的基本代碼。我的應用程序實現了一系列接口,然後在運行時通過彈簧注入(如配置)。我想知道是否有一種方法可以知道哪個類實現了接口被注入。我需要這個,因爲我有我想要執行的JSON序列化器/反序列化器操作,但爲此我需要知道注入的類。如何知道哪個bean被注入界面?
我有一個java配置文件,將描述接線,它將提供遊戲實現。但到目前爲止,我還沒有能夠獲得實現接口的具體類。我也沒有成功從上下文中請求這些信息。
螞蟻提示?
所以我有一個設置軟件包,它是擴展應用程序的基本代碼。我的應用程序實現了一系列接口,然後在運行時通過彈簧注入(如配置)。我想知道是否有一種方法可以知道哪個類實現了接口被注入。我需要這個,因爲我有我想要執行的JSON序列化器/反序列化器操作,但爲此我需要知道注入的類。如何知道哪個bean被注入界面?
我有一個java配置文件,將描述接線,它將提供遊戲實現。但到目前爲止,我還沒有能夠獲得實現接口的具體類。我也沒有成功從上下文中請求這些信息。
螞蟻提示?
所以我圍繞這個問題的方式是通過向JSON反序列化器中注入對象並使用getClass()方法作爲模板給Jackson使用。它的功能就像一個魅力,甚至認爲被注入的實現被注入到依賴中發生的佈線中!希望能幫助到你!
您可以使用反射讓注入的實例告訴您它是什麼實現類:injectedInstance.getClass().getName()
。但是,除非你做了一些特別的事情,否則認爲這是一種破解。您可能應該重新訪問您的設計,以免不必這樣做。
確實,我認爲這將是我解決這個設計問題時的部分解決方案。謝謝! – jfzr
你可以簡單地自動裝配的接口,並得到實現的類名:
@Autowired
private Service service;
System.out.println(service.getClass().getName());
同春豆
但是Spring容器已通常代理他們,所以它並不總是有益的,在課堂上面的例子是一個春天類叫做:
hello.HelloServiceImpl$$EnhancerBySpringCGLIB$$ad2e225d
我懷疑你應該看看傑克遜串行應該處理這一切,看到Java - Jackson Annotations to handle no suitable constructor
如果你能得到的話,接口的目的就會丟失,對嗎? – DNAj
@DNAj我明白你的觀點,但除此之外,我無法處理JSON轉換(傑克遜),因爲我使用的POJO包含應該由我的應用實現的接口。可以肯定的是,這裏有一個設計問題,但是我不知道如何在不知道實現的類的情況下解決它。 – jfzr
嗨@jfzr,那麼你只有選擇反射。通過正確使用反射,您還可以更改訪問修飾符並使其可訪問。讓我知道你是否需要更多的信息。 – DNAj