বসন্ত কীভাবে জানতে পারে যে কোন পলিমারফিক ব্যবহার করতে হবে।
যতক্ষণ না কেবল ইন্টারফেসের একক প্রয়োগ রয়েছে এবং সেই প্রয়োগটি @Component
স্প্রিংয়ের উপাদান স্ক্যান সক্ষম করে তা বর্ণিত হয় , স্প্রিং ফ্রেমওয়ার্কটি (ইন্টারফেস, বাস্তবায়ন) জোড়াটি খুঁজে পেতে পারে। যদি উপাদান স্ক্যান সক্ষম না করা থাকে, তবে আপনাকে আপনার অ্যাপ্লিকেশন-কনফিগারেশন.এক্সএমএল (বা সমতুল্য বসন্তের কনফিগারেশন ফাইল) এ শিমের স্পষ্টরূপে সংজ্ঞা দিতে হবে।
আমার কি কি কোয়ালিফায়ার বা @ রিসোর্স দরকার?
আপনার একবারে একাধিক বাস্তবায়ন হয়ে গেলে, তারপরে আপনার প্রত্যেককেই যোগ্যতা অর্জন করতে হবে এবং অটো-ওয়্যারিংয়ের সময়, আপনাকে @Qualifier
টীকা সহ সঠিক প্রয়োগকরণ ইনজেক্ট করার জন্য টিকাটি ব্যবহার করতে হবে @Autowired
। আপনি যদি @ রিসোর্স (J2EE শব্দার্থবিজ্ঞান) ব্যবহার করে থাকেন তবে আপনার এই টীকাটির name
বৈশিষ্ট্যটি ব্যবহার করে শিমের নামটি নির্দিষ্ট করা উচিত ।
আমরা কেন ইন্টারফেসটির স্বায়ত্তশাসন করি এবং প্রয়োগকৃত শ্রেণিটি না?
প্রথমত, সাধারণভাবে ইন্টারফেসগুলিতে কোড করা সর্বদা একটি ভাল অনুশীলন। দ্বিতীয়ত, বসন্তের ক্ষেত্রে, আপনি রানটাইম সময়ে যে কোনও বাস্তবায়ন ইনজেকশন করতে পারেন। একটি সাধারণ ব্যবহারের ক্ষেত্রটি হচ্ছে পরীক্ষার পর্যায়ে মক প্রয়োগ বাস্তবায়ন করতে।
interface IA
{
public void someFunction();
}
class B implements IA
{
public void someFunction()
{
//busy code block
}
public void someBfunc()
{
//doing b things
}
}
class C implements IA
{
public void someFunction()
{
//busy code block
}
public void someCfunc()
{
//doing C things
}
}
class MyRunner
{
@Autowire
@Qualifier("b")
IA worker;
....
worker.someFunction();
}
আপনার শিমের কনফিগারেশনটি দেখতে এমন হওয়া উচিত:
<bean id="b" class="B" />
<bean id="c" class="C" />
<bean id="runner" class="MyRunner" />
বিকল্পভাবে, আপনি যদি প্যাকেজগুলির মধ্যে উপস্থিত উপাদানগুলি স্ক্যান সক্ষম করে থাকেন তবে আপনার @Component
নিম্নরূপ হিসাবে প্রতিটি শ্রেণীর যোগ্যতা অর্জন করা উচিত :
interface IA
{
public void someFunction();
}
@Component(value="b")
class B implements IA
{
public void someFunction()
{
//busy code block
}
public void someBfunc()
{
//doing b things
}
}
@Component(value="c")
class C implements IA
{
public void someFunction()
{
//busy code block
}
public void someCfunc()
{
//doing C things
}
}
@Component
class MyRunner
{
@Autowire
@Qualifier("b")
IA worker;
....
worker.someFunction();
}
তারপর worker
মধ্যে MyRunner
ধরনের একটি দৃষ্টান্ত দিয়ে ইনজেকশনের হবে B
।