স্প্রিং কনফিগারেশন ফাইলের শিম আইডি এবং নাম ব্যবহারের মধ্যে পার্থক্য


205

একটি স্প্রিং কনফিগারেশন ফাইলের একটি উপাদানের উপর কোনও idঅ্যাট্রিবিউট এবং nameঅ্যাট্রিবিউট ব্যবহারের মধ্যে কি কোনও পার্থক্য রয়েছে <bean>?


8
এই সোজা এবং এত সহজ এবং বিস্তৃত উত্তর দিয়ে প্রশ্ন দ্বারা আসা কঠিন। গ্রেট। ধন্যবাদ!
পিটার পেরে

উত্তর:


129

থেকে বসন্ত রেফারেন্স , 3.2.3.1 নেমিং বিন্স :

প্রতিটি শিমের এক বা একাধিক আইডিস থাকে (এটি শনাক্তকারী বা নামও বলা হয়; এই পদগুলি একই জিনিসটিকে বোঝায়)। শিমটি যে কন্টেইনারটি ধারণ করা হয়েছে তার মধ্যে এই আইডিগুলি অবশ্যই অনন্য হওয়া উচিত A একটি শিমের প্রায় সবসময়ই কেবল একটি আইডি থাকে তবে শিমের যদি একাধিক আইডি থাকে তবে অতিরিক্তগুলি মূলত এলিয়াস হিসাবে বিবেচনা করা যেতে পারে।

এক্সএমএল-ভিত্তিক কনফিগারেশন মেটাডেটা ব্যবহার করার সময়, আপনি বিন আইডেন্টিফায়ার (গুলি) নির্দিষ্ট করতে আপনি 'আইডি' বা 'নাম' বৈশিষ্ট্য ব্যবহার করেন। 'আইডি' বৈশিষ্ট্যটি আপনাকে ঠিক একটি আইডি নির্দিষ্ট করতে দেয় এবং এটি যেমন একটি এক্সএমএল উপাদান আইডি বৈশিষ্ট্য হিসাবে থাকে, এক্সএমএল পার্সার যখন আইডিটি রেফারেন্স করে তখন কিছু অতিরিক্ত বৈধতা নিতে সক্ষম হয়; যেমন, এটি একটি বিন আইডিকে নির্দিষ্ট করার পছন্দসই উপায়। যাইহোক, এক্সএমএল স্পেসিফিকেশন XML আইডিতে বৈধ অক্ষরগুলিকে সীমাবদ্ধ করে না। এটি সাধারণত কোনও বাধা নয়, তবে আপনার যদি এই বিশেষ এক্সএমএল অক্ষরগুলির একটি ব্যবহার করার প্রয়োজন হয় বা শিমের সাথে অন্য উপকরণগুলি পরিচয় করিয়ে দিতে চান তবে আপনি কমা দ্বারা পৃথককৃত এক বা একাধিক শিম আইডিকে নির্দিষ্ট করতে পারেন (, ), সেমিকোলন (;), বা 'নাম' বৈশিষ্ট্যে সাদা স্থান।

সুতরাং মূলত idবৈশিষ্ট্যটি এক্সএমএল আইডি বৈশিষ্ট্যের মানগুলির সাথে সামঞ্জস্য করে যেখানে nameকিছুটা আরও নমনীয়। সাধারণভাবে বলতে গেলে, আমি nameবেশ কিছু একচেটিয়াভাবে ব্যবহার করি । এটি কেবল আরও "স্প্রিং-ওয়াই" বলে মনে হচ্ছে।


46
আপনি "নাম" বৈশিষ্ট্যটি ব্যবহার করতে পছন্দ করেন যদিও আপনি বসানো রেফারেন্সটি উদ্ধৃত করেছেন যা "আইডি" বৈশিষ্ট্যটি ব্যবহার করার পরামর্শ দেয়? এমনকি যদি আপনি "নাম" দিয়ে আটকে থাকতে পছন্দ করেন তবে বসন্তের রেফারেন্স অন্যথায় প্রস্তাব দিলে আপনি এটিকে আরও "স্প্রিং-ওয়াই" বলতে পারবেন না :) এটি নিত্তিক, আমি জানি;)
থাডাম

77

স্প্রিং ৩.১ থেকে idবৈশিষ্ট্যটি হ'ল xsd:stringএবং বৈশিষ্ট্যের সমান পরিসরের অক্ষরের অনুমতি দেয় name

একটি idএবং ক এর মধ্যে পার্থক্য কেবল nameহ'ল একটিতে nameকমা, সেমিকোলন বা হোয়াইটস্পেস দ্বারা পৃথক একাধিক এলিয়াস থাকতে পারে, যেখানে idএকটিতে একটি মান হওয়া আবশ্যক।

বসন্ত থেকে ৩.২ ডকুমেন্টেশন:

এক্সএমএল-ভিত্তিক কনফিগারেশন মেটাডেটাতে, আপনি শিম সনাক্তকারী (গুলি) নির্দিষ্ট করতে আইডি এবং / অথবা নামের বৈশিষ্ট্যগুলি ব্যবহার করেন। আইডি বৈশিষ্ট্য আপনাকে ঠিক একটি আইডি নির্দিষ্ট করতে দেয় to প্রচলিতভাবে এই নামগুলি আলফানিউমারিক ('মাইবিয়ান', 'ফস সার্ভিস' ইত্যাদি) তবে বিশেষ অক্ষরগুলিও হতে পারে। আপনি যদি শিমের সাথে অন্যান্য উপকরণগুলি পরিচয় করিয়ে দিতে চান তবে আপনি সেগুলি কমা (,), সেমিকোলন (;), বা সাদা স্পেস দ্বারা পৃথক করে নাম অ্যাট্রিবিউটেও নির্দিষ্ট করতে পারেন। Historicalতিহাসিক নোট হিসাবে, স্প্রিং ৩.১ এর পূর্ববর্তী সংস্করণগুলিতে, আইডি বৈশিষ্ট্যটি একটি এক্সএসডি: আইডি হিসাবে টাইপ করা হয়েছিল, যা সম্ভাব্য অক্ষরগুলিকে বাধা দেয়। ৩.১ হিসাবে এটি এখন এক্সএসডি: স্ট্রিং। নোট করুন যে বিন আইডি স্বতন্ত্রতাটি এখনও ধারক দ্বারা প্রয়োগ করা হয়, যদিও এক্সএমএল পার্সারদের দ্বারা আর নেই।


48

হয় এক কাজ করবে। এটি আপনার প্রয়োজনের উপর নির্ভর করে:
যদি আপনার শিম শনাক্তকারীটিতে উদাহরণস্বরূপ বিশেষ অক্ষর (গুলি) থাকে তবে /viewSummary.htmlএটি শিম হিসাবে অনুমোদিত idহবে না, কারণ এটি কোনও বৈধ এক্সএমএল আইডি নয়। এই জাতীয় ক্ষেত্রে আপনি শিমের সংজ্ঞা নির্ধারণ করতে এড়াতে পারেন idএবং এর nameপরিবর্তে শিম সরবরাহ করতে পারেন । অ্যাট্রিবিউট এছাড়াও সংজ্ঞায়িত সাহায্য করে , আপনার শিম জন্য স্প্যানিশ ভাষায় যেহেতু এটি একটি প্রদত্ত শিম জন্য একাধিক শনাক্তকারী উল্লেখ করতে পারবেন।
namealias


4
আপনার নিজের কথায় এটি বলার জন্য এবং কেন বিশেষ চরিত্রের প্রয়োজন হতে পারে তার একটি উদাহরণ দেওয়ার জন্য প্লাস ওয়ান।
মাইকেল পিফেল

ধন্যবাদ. সন্তুষ্ট.
pugmarx

3

<বিআইএন> ট্যাগে কোনও আইডি বৈশিষ্ট্য এবং নাম অ্যাট্রিবিউট ব্যবহারের মধ্যে কি কোনও পার্থক্য রয়েছে?

কিছু ছোটখাটো পার্থক্য বিদ্যমান যেমন আইডি ব্যবহার করা সঠিকভাবে পরিচালনা না করলে ব্যতিক্রম ছুঁড়ে ফেলবে।
আমাকে নীচের প্রশ্নের উত্তর দিন

কোনও আইডি অ্যাট্রিবিউট ব্যবহার করে <বিবিএন> ট্যাগে একটি নাম অ্যাট্রিবিউট ব্যবহার করার মধ্যে কি কোনও পার্থক্য রয়েছে ,

এখানে কোন পার্থক্য নেই. যখন আইডি বা নাম <বিবি>> ট্যাগ ব্যবহার করা হয় আপনি একই প্রভাব ফেলবেন।

কিভাবে?

আইডি এবং নাম উভয় বৈশিষ্ট্যই আমাদের একটি শিমকে শনাক্তকরণের মান সরবরাহ করার একটি উপায় দিচ্ছে (এই মুহুর্তের জন্য, আইডির অর্থ আইডি তবে সনাক্তকারী নয়)। উভয় ক্ষেত্রেই, আপনি কল করলে আপনি একই ফলাফল দেখতে পাবেন applicationContext.getBean("bean-identifier");

<বিয়ান> ট্যাগের জাভা সমান @ বিয়ানকে ধরুন, আপনি কোনও আইডি বৈশিষ্ট্য খুঁজে পাবেন না। আপনি কেবল নাম অ্যাট্রিবিউটের মাধ্যমে @ বিয়ানকে আপনার সনাক্তকারী মান দিতে পারেন।

আমি এটি একটি উদাহরণের মাধ্যমে ব্যাখ্যা করব:
এই কনফিগারেশন ফাইলটি ধরুন, আসুন এটি বসন্ত 1.xml হিসাবে কল করুন

<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
  <bean id="foo" class="com.intertech.Foo"></bean>
  <bean id="bar" class="com.intertech.Bar"></bean>
</beans>

স্প্রিং ফু অবজেক্টের জন্য ফেরত দেয় Foo f = (Foo) context.getBean("foo"); । উপরের স্প্রিং 1.xml এর id="foo"সাথে প্রতিস্থাপন করুন name="foo", আপনি এখনও একই ফলাফল দেখতে পাবেন।

আপনার এক্সএমএল কনফিগারেশন এর মতো সংজ্ঞা দিন

<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
  <bean id="fooIdentifier" class="com.intertech.Foo"></bean>
  <bean name="fooIdentifier" class="com.intertech.Foo"></bean>
</beans>

আপনি বিয়ান ডেফিনিশন পার্সিংএক্সসেপশন পাবেন। এটি বলবে, শিমের নাম 'fooIdentifier' ইতিমধ্যে এই উপাদানটিতে ব্যবহৃত হয়েছে। যাইহোক, এটি একই ব্যতিক্রম আপনি দেখতে পাবেন নীচের কনফিগারেশন
<বিম নাম = "fooIdentifier" শ্রেণি = "com.intertech.Foo"> </ বি>
<বিয়ান নাম = "fooIdentifier" শ্রেণি = "কম। ইন্টারটেক.ফু "> </ বি>>


আপনি যদি আইএন এবং নাম দুটিকে বিনের ট্যাগে রাখেন তবে শিমের 2 টি শনাক্তকারী রয়েছে বলে জানা যায়। আপনি যে কোনও শনাক্তকারীর সাথে একই শিম পেতে পারেন। হিসাবে কনফিগার নিতে

<?xml version="1.0" encoding="UTF-8"?><br>
<beans ...>
  <bean id="fooById" name="fooByName" class="com.intertech.Foo"></bean>
  <bean id="bar" class="com.intertech.Bar"></bean>
</beans>

নিম্নলিখিত কোড সত্য প্রিন্ট করে

FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(...);
Foo fooById = (Foo) context.getBean("fooById")// returns Foo object;
Foo fooByName = (Foo) context.getBean("fooByName")// returns Foo object;
System.out.println(fooById == fooByName) //true

1

অ্যাপ্লিকেশন কনটেক্সট এক্সএমএলে আইডি এবং নাম নির্ধারণের মধ্যে কি পার্থক্য রয়েছে? ৩.১ (বসন্ত) হিসাবে নেই, আইডিটিকে এক্সএসডি: স্ট্রিং টাইপ হিসাবেও সংজ্ঞায়িত করা হয়েছে। এর অর্থ হল নাম নির্ধারণের ক্ষেত্রে যা কিছু অক্ষর অনুমোদিত তা আইডিতেও অনুমোদিত। স্প্রিং ৩.১ এর আগে এটি সম্ভব ছিল না।

নামটি আইডির মতো হলে কেন ব্যবহার করবেন? এটি কিছু পরিস্থিতিতে যেমন দরকারী হয় যেমন অ্যাপ্লিকেশনের প্রতিটি উপাদানকে সেই অংশের সাথে নির্দিষ্ট সিমের নাম ব্যবহার করে একটি সাধারণ নির্ভরতা বোঝাতে দেয়।

For example, the configuration metadata for subsystem A may refer to a DataSource via the name subsystemA-dataSource. The configuration metadata for subsystem B may refer to a DataSource via the name subsystemB-dataSource. When composing the main application that uses both these subsystems the main application refers to the DataSource via the name myApp-dataSource. To have all three names refer to the same object you add to the MyApp configuration metadata the following 

<bean id="myApp-dataSource" name="subsystemA-dataSource,subsystemB-dataSource" ..../>

Alternatively, You can have separate xml configuration files for each sub-system and then you can make use of
alias to define your own names.

<alias name="subsystemA-dataSource" alias="subsystemB-dataSource"/>
<alias name="subsystemA-dataSource" alias="myApp-dataSource" />

0

উভয় idএবং nameস্প্রিং আইওসি ধারক / অ্যাপ্লিকেশনসন্টেক্সটে শিম শনাক্তকারী। idবৈশিষ্ট্য আপনি ঠিক একটি আইডি কিন্তু ব্যবহার উল্লেখ করতে দেয় nameঅ্যাট্রিবিউট আপনি যে শিম থেকে ওরফে নাম দিতে পারেন।

আপনি বসন্তের ডকটি এখানে পরীক্ষা করতে পারেন ।

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