7
Class.getResource () และ ClassLoader.getResource () แตกต่างกันอย่างไร?
ฉันสงสัยว่าความแตกต่างระหว่างClass.getResource()และเป็นClassLoader.getResource()อย่างไร แก้ไข: ฉันต้องการทราบเป็นพิเศษหากแคชใด ๆ ที่เกี่ยวข้องในระดับไฟล์ / ไดเรกทอรี เช่นเดียวกับใน "รายการไดเรกทอรีถูกแคชในรุ่น Class?" AFAIK ต่อไปนี้ควรทำเช่นเดียวกัน แต่ไม่: getClass().getResource() getClass().getClassLoader().getResource() ฉันค้นพบสิ่งนี้เมื่อเล่นซอกับรหัสการสร้างรายงานที่สร้างไฟล์ใหม่WEB-INF/classes/จากไฟล์ที่มีอยู่ในไดเรกทอรีนั้น เมื่อใช้วิธีการจากชั้นเรียนฉันสามารถค้นหาไฟล์ที่มีเมื่อใช้งานโดยใช้getClass().getResource()แต่เมื่อพยายามดึงไฟล์ที่สร้างขึ้นใหม่ฉันได้รับวัตถุที่ไม่มีค่า การเรียกดูไดเรกทอรีอย่างชัดเจนแสดงว่ามีไฟล์ใหม่ ชื่อไฟล์ถูกต่อท้ายด้วยเครื่องหมายสแลชเช่นเดียวกับใน "/myFile.txt" ในทางกลับกันClassLoaderเวอร์ชั่นของเวอร์ชั่นgetResource()ก็พบไฟล์ที่สร้างขึ้น จากประสบการณ์นี้ดูเหมือนว่าจะมีการแคชรายการไดเรกทอรีที่เกิดขึ้น ฉันถูกและถ้าเป็นเช่นนั้นเอกสารนี้อยู่ที่ไหน? จากAPI เอกสารบนClass.getResource() ค้นหาทรัพยากรที่มีชื่อที่กำหนด กฎสำหรับการค้นหาทรัพยากรที่เกี่ยวข้องกับคลาสที่กำหนดถูกนำไปใช้โดยการกำหนดคลาสโหลดเดอร์ของคลาส วิธีนี้มอบให้กับ class loader ของวัตถุนี้ หากวัตถุนี้ถูกโหลดโดยตัวโหลดคลาส bootstrap วิธีจะมอบหมายให้ ClassLoader.getSystemResource (java.lang.String) สำหรับฉันการอ่านนี้ "Class.getResource เรียกชื่อ getResource () ของ classloader ของมันเอง" getClass().getClassLoader().getResource()ซึ่งก็จะเป็นเช่นเดียวกับการทำ แต่เห็นได้ชัดว่าไม่ใช่ มีใครช่วยเล่าเรื่องนี้ให้ฉันฟังหน่อยได้ไหม?