反射是通過什么來實現(xiàn)的 如何把一個接口的所有實現(xiàn)類反射出來?
如何把一個接口的所有實現(xiàn)類反射出來?如果您不知道這個接口的實現(xiàn)類,那么您就不能使用Java的默認類加載器獲得所有的實現(xiàn)類,因為類加載器只在程序運行期間將類加載到靜態(tài)區(qū)域。也就是說,如果你的程序需要使用
如何把一個接口的所有實現(xiàn)類反射出來?
如果您不知道這個接口的實現(xiàn)類,那么您就不能使用Java的默認類加載器獲得所有的實現(xiàn)類,因為類加載器只在程序運行期間將類加載到靜態(tài)區(qū)域。也就是說,如果你的程序需要使用一個類,而JVM發(fā)現(xiàn)這個類沒有被classloader加載,它會主動加載,否則會被重載跳過,你就無法知道那些沒有加載的實現(xiàn)類。如果您知道哪些實現(xiàn)類可用,那么很容易配置一個XML文件,在XML文件中寫入實現(xiàn)類的完整類名,然后編寫一個解析器,迭代每個類名,并使用Class.forName類把它裝進去。您甚至可以解析所有Java源文件或類文件。這就是像eclipse這樣的ide所做的。它管理項目下的所有類并解析這些類,這樣當我們編寫程序時,就可以有代碼提示和其他函數(shù)。如果您只想知道這個接口的實現(xiàn)類,請在eclipse中選擇接口并按F4。Eclipse將為您列出所有的實現(xiàn)類。
多個客戶同時請求一個servlet后?
web容器通常為每個請求創(chuàng)建一個線程。如果用戶確認servlet實例一次只處理一個請求,servlet就可以實現(xiàn)singlethreadmodel接口。如果servlet實現(xiàn)了這個接口,那么用戶可以確保兩個線程不能在servlet的服務(wù)方法中同時執(zhí)行。web容器可以通過同步訪問servlet的單個實例來實現(xiàn),或者通過維護web組件池來為每個實例調(diào)用新的請求。此接口不能防止web組件訪問共享資源(如靜態(tài)類變量和外部對象)時出現(xiàn)同步問題