বসন্ত শ্রেণিপথ উপসর্গ পার্থক্য


141

নথিভুক্ত এখানে এটা যুক্তরাষ্ট্রের

এই বিশেষ উপসর্গটি নির্দিষ্ট করে যে প্রদত্ত নামের সাথে মেলে সমস্ত শ্রেণিপথ সংস্থানগুলি অবশ্যই প্রাপ্ত হতে হবে (অভ্যন্তরীণভাবে, এটি মূলত একটি ClassLoader.getRes स्रोत (...) কল) এর মাধ্যমে ঘটে এবং তারপরে চূড়ান্ত অ্যাপ্লিকেশন প্রসঙ্গে সংজ্ঞাটি সংযুক্ত করতে মিশে যায়।

কেউ এই ব্যাখ্যা করতে পারেন?

তারকাচিহ্ন ব্যতীত classpath*:conf/appContext.xmlবিরোধী হিসাবে ব্যবহারের মধ্যে পার্থক্য কী classpath:conf/appContext.xml


ভবিষ্যতের পাঠকরাও "স্থিতি = অস্বীকার" সহ এই বাগটি দেখুন। github.com/spring-projects/spring-framework/issues/16017 ইউআরএল শেষ পর্যন্ত ব্যর্থ হলে, বাগ পোস্টের শিরোনাম হ'ল ওয়াইল্ডকার্ড ক্লাসপাথ এবং ওয়াইল্ডকার্ড পথ সহ একটি জেআর ফাইলের মূল থেকে একটি এক্সএমএল ফাইলের আমদানি is [SPR-11390] কাজ করে না "
গ্রানাডা কোডার

উত্তর:


207

সরল সংজ্ঞা

এর classpath*:conf/appContext.xmlসহজ অর্থ হ'ল শ্রেণিপথের সমস্ত জারগুলিতেconf ফোল্ডারগুলির নীচে থাকা সমস্ত অ্যাপকন্টেক্সটেক্স.এমএমএল ফাইলগুলি বাছাই করে এক বড় অ্যাপ্লিকেশন প্রসঙ্গে যোগ দেওয়া হবে।

বিপরীতে, কেবলমাত্র এই জাতীয় একটি ফাইলclasspath:conf/appContext.xml লোড করা হবে ... আপনার ক্লাসপথে পাওয়া প্রথমটি।


6
তাদের মধ্যে আরও একটি আকর্ষণীয় পার্থক্য রয়েছে। আমার প্রশ্নটিও দেখুন: stackoverflow.com/questions/16985770/…
ইউজিন

27
একটি খুব গুরুত্বপূর্ণ বিষয় - আপনি যদি * এবং স্প্রিংয়ের কোনও মিল খুঁজে না পান তবে এটি অভিযোগ করবে না। যদি আপনি * ব্যবহার করেন না এবং কোনও মিল নেই, তবে প্রসঙ্গটি শুরু হবে না (!)
রায় ট্রুইলোভ

39

classpath*:...প্রাথমিকভাবে যখন আপনি একাধিক শিম সংজ্ঞা ফাইল থেকে একটি অ্যাপ্লিকেশন প্রসঙ্গ গড়ে তুলতে ওয়াইল্ডকার্ড সিনট্যাক্স ব্যবহার চান সিনট্যাক্স দরকারী।

উদাহরণস্বরূপ, আপনি যদি নিজের প্রসঙ্গটি ব্যবহার classpath*:appContext.xmlকরে তৈরি appContext.xmlকরেন তবে ক্লাসপাথে ক্লাসপথে ডাকা প্রতিটি সংস্থার জন্য স্ক্যান করা হবে এবং সেগুলি থেকে সিম সংজ্ঞাগুলি একক প্রসঙ্গে মেশানো হবে।

বিপরীতে, ক্লাসপথ থেকে কল করা classpath:conf/appContext.xmlএকটি এবং কেবল একটি ফাইল পাবেন appContext.xml। যদি একের বেশি থাকে তবে অন্যরা এড়ানো হবে।


2
ক্লাসপথ কি সাব-ডিরেক্টরিতেও দেখবে? অন্য কথায়, আমার কাছে ক্লাসপথের রুটে অ্যাপকন্টেক্সটেক্সটেক্সএমএল এবং /dir/appContext.xML এ থাকা একটি থাকলে আমি যখন ক্লাসপাথ *: appContext.xML ব্যবহার করি তখন কি এটি উভয়ই লোড হবে?
অহঙ্গারআর্টিস্ট

21

শ্রেণিপথ *: এটি সংস্থানগুলির একটি তালিকা বোঝায় এবং শ্রেণিপথে উপস্থিত সমস্ত ফাইল লোড করে এবং তালিকাটি খালি হতে পারে এবং যদি এই জাতীয় কোনও ফাইল শ্রেণিপথে উপস্থিত না থাকে তবে অ্যাপ্লিকেশন কোনও ব্যতিক্রম ছুঁড়ে না ফেলে (কেবল ত্রুটি উপেক্ষা করে)।

ক্লাসপাথ: এটি একটি নির্দিষ্ট সংস্থানকে বোঝায় এবং ক্লাসপথে পাওয়া প্রথম ফাইলটি লোড করে এবং ক্লাসপথে এই জাতীয় কোনও ফাইল উপস্থিত না থাকলে এটি একটি ব্যতিক্রম ছুঁড়ে ফেলবে

java.io.FileNotFoundException: class path resource [conf/appContext.xml] cannot be opened because it does not exist

অফিসিয়াল ডক " Resourceএকবারে মাত্র একটি সংস্থানকে রিসোর্স হিসাবে নির্দেশ করে, একটি প্রকৃত নির্মাণের জন্য শ্রেণিপথ *: উপসর্গ ব্যবহার করা সম্ভব নয় ।" প্লাস আমি এই অদ্ভুত ত্রুটি পেয়েছিলাম, এভাবেই আমি এখানে শেষ করেছি। আপনি যদি রিসোর্স আমদানি করতে যাচ্ছেন তবে ওয়াইল্ডকার্ড শ্রেণিপথ উপসর্গটি ব্যবহার করার কোনও অর্থ নেই।
গ্যাব্রিয়েলশিরো

0

বসন্তের উত্স কোড:

public Resource[] getResources(String locationPattern) throws IOException {
   Assert.notNull(locationPattern, "Location pattern must not be null");
   //CLASSPATH_ALL_URL_PREFIX="classpath*:"
   if (locationPattern.startsWith(CLASSPATH_ALL_URL_PREFIX)) {
      // a class path resource (multiple resources for same name possible)
      if (getPathMatcher().isPattern(locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length()))) {
         // a class path resource pattern
         return findPathMatchingResources(locationPattern);
      }
      else {
         // all class path resources with the given name
         return findAllClassPathResources(locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length()));
      }
   }
   else {
      // Only look for a pattern after a prefix here
      // (to not get fooled by a pattern symbol in a strange prefix).
      int prefixEnd = locationPattern.indexOf(":") + 1;
      if (getPathMatcher().isPattern(locationPattern.substring(prefixEnd))) {
         // a file pattern
         return findPathMatchingResources(locationPattern);
      }
      else {
         // a single resource with the given name
         return new Resource[] {getResourceLoader().getResource(locationPattern)};
      }
   }
}  

আপনি দয়া করে ব্যাখ্যা করতে পারেন?
RtmY
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.