টি এল; ডিআর
@ অটোভায়ার্ড টীকাগুলি আপনাকে এক্সএমএল ফাইল (বা অন্য কোনও উপায়ে) থেকে নিজের দ্বারা ওয়্যারিংয়ের প্রয়োজনীয়তা বাঁচায় এবং কোথায় আপনাকে ইঞ্জেকশন দেওয়ার দরকার তা খুঁজে পেয়েছে এবং এটি আপনার জন্য কী করে।
সম্পূর্ণ ব্যাখ্যা
@Autowired
টীকা কি আপনি উদ্বুদ্ধ করতে এর অন্যত্র কনফিগারেশনের এড়িয়ে যেতে দেয় এবং শুধুমাত্র আপনার জন্য এটা আছে। আপনার প্যাকেজটি ধরে নিচ্ছেন যে com.mycompany.movies
আপনি এই ট্যাগটি আপনার এক্সএমএল (অ্যাপ্লিকেশন প্রসঙ্গে ফাইল) রাখতে হবে:
<context:component-scan base-package="com.mycompany.movies" />
এই ট্যাগটি একটি অটো-স্ক্যানিং করবে। ধরে নেওয়া যায় যে প্রতিটি শ্রেণি যা শিম হয়ে উঠতে হবে একটি সঠিক টীকা যেমন @Component
(সাধারণ শিমের জন্য) বা @Controller
(একটি সার্লেট নিয়ন্ত্রণের জন্য) বা @Repository
( DAO
ক্লাসগুলির জন্য ) এবং এই ক্লাসগুলি প্যাকেজের অধীনে কোথাও রয়েছে com.mycompany.movies
, স্প্রিং এই সমস্তটি সন্ধান করবে এবং তৈরি করবে প্রতিটি জন্য একটি শিম। এটি 2 টি ক্লাসের স্ক্যানে করা হয় - প্রথমবার এটি কেবল ক্লাসগুলির সন্ধান করে যা সিম হতে হবে এবং এটি করার জন্য যে ইঞ্জেকশনগুলি লাগানোর দরকার তা ম্যাপ করে এবং দ্বিতীয় স্ক্যানে এটি মটরশুটিগুলিকে ইনজেকশন দেয়। অবশ্যই, আপনি আপনার মটরশুটিটিকে আরও বেশি traditional তিহ্যবাহী এক্সএমএল ফাইলে বা একটি @ কনফিগারেশন ক্লাস (বা তিনটির কোনও সমন্বয়) দিয়ে সংজ্ঞায়িত করতে পারেন ।
@Autowired
টীকা স্প্রিং বলে যেখানে একটি ইনজেকশন ঘটতে হবে। যদি আপনি এটি এমন কোনও পদ্ধতিতে রাখেন তবে setMovieFinder
এটি বুঝতে পারে (উপসর্গ set
+ @Autowired
টিকা দ্বারা) যে শিমটি ইনজেকশন দেওয়া দরকার। দ্বিতীয় স্ক্যানে, স্প্রিং প্রজাতির MovieFinder
শিমের সন্ধান করে এবং যদি এটি এর মতো শিমটি খুঁজে পায় তবে এটি এটিকে এই পদ্ধতিতে সংক্রামিত করে। যদি এটি দুটি এর মতো মটরশুটি খুঁজে পায় আপনি একটি পাবেন Exception
। এড়াতে Exception
, আপনি @Qualifier
টীকাটি ব্যবহার করতে পারেন এবং দুটি শিমের মধ্যে কোনটি নিম্নলিখিত পদ্ধতিতে ইনজেক্ট করতে হবে তা বলতে পারেন:
@Qualifier("redBean")
class Red implements Color {
// Class code here
}
@Qualifier("blueBean")
class Blue implements Color {
// Class code here
}
অথবা আপনি যদি আপনার এক্সএমএলে মটরশুটি ঘোষনা করতে পছন্দ করেন তবে এটি দেখতে এমন কিছু দেখাচ্ছে:
<bean id="redBean" class="com.mycompany.movies.Red"/>
<bean id="blueBean" class="com.mycompany.movies.Blue"/>
ইন @Autowired
ঘোষণা, এছাড়াও আপনি যোগ করতে হবে @Qualifier
যা দুই রঙ মটরশুটি উদ্বুদ্ধ করতে বোলো না;
@Autowired
@Qualifier("redBean")
public void setColor(Color color) {
this.color = color;
}
আপনি যদি দুটি টিকা ব্যবহার করতে না চান ( @Autowired
এবং @Qualifier
) আপনি @Resource
এই দুটি একত্রিত করতে ব্যবহার করতে পারেন :
@Resource(name="redBean")
public void setColor(Color color) {
this.color = color;
}
@Resource
(আপনি যদি এই উত্তরে প্রথম মন্তব্য তা সম্পর্কে কিছু অতিরিক্ত ডেটা পড়তে পারে) আপনি দুই টীকা ব্যবহার spares এবং এর পরিবর্তে আপনি যদি শুধুমাত্র একটি ব্যবহার করুন।
আমি আরও দুটি মন্তব্য যুক্ত করব:
- এর
@Inject
পরিবর্তে ভাল অনুশীলনটি ব্যবহার করা হবে @Autowired
কারণ এটি স্প্রিং-নির্দিষ্ট নয় এবং এটি JSR-330
স্ট্যান্ডার্ডের অংশ ।
- আরেকটি ভাল অনুশীলন হ'ল পদ্ধতির পরিবর্তে কনস্ট্রাক্টরের উপর
@Inject
/ রাখা @Autowired
। আপনি যদি এটি কোনও কনস্ট্রাক্টরের উপর রাখেন তবে আপনি যাচাই করতে পারেন যে ইনজেকশন করা মটরশুটিগুলি শালীন নয় এবং দ্রুত ব্যর্থ হয় যখন আপনি অ্যাপ্লিকেশনটি শুরু করার চেষ্টা করেন এবং NullPointerException
যখন আপনাকে আসলে শিমটি ব্যবহার করার দরকার হয় তখন এড়ানো উচিত।
আপডেট : ছবিটি সম্পূর্ণ করতে, আমি ক্লাস সম্পর্কে একটি নতুন প্রশ্ন তৈরি করেছি @Configuration
।