স্প্রিং ফ্রেমওয়ার্কের Annotation-driven configuration একটি আধুনিক এবং সহজ উপায় যা স্প্রিং কনফিগারেশন পরিচালনা করতে ব্যবহৃত হয়। স্প্রিংয়ের পুরোনো কনফিগারেশন পদ্ধতিতে XML ফাইল ব্যবহার করা হতো, কিন্তু annotation-driven configuration এ আপনি কনফিগারেশন কোডটি সরাসরি জাভা ক্লাসে অ্যানোটেশন ব্যবহার করে লিখতে পারেন। এটি কোডের ক্লিনলিনেস, মডুলারিটি, এবং পারফরম্যান্স উন্নত করে এবং স্প্রিং কনফিগারেশনকে আরও সহজ ও পরিষ্কার করে তোলে।
Annotation-driven Configuration এর সুবিধা
- কোডের পরিষ্কারতা: XML কনফিগারেশন ফাইলের পরিবর্তে জাভা ক্লাসে সরাসরি অ্যানোটেশন ব্যবহার করার মাধ্যমে কোড পরিষ্কার এবং সহজ হয়।
- কমপ্লেক্সিটি কমানো: XML কনফিগারেশন ফাইলের তুলনায় অ্যানোটেশন ব্যবহারের মাধ্যমে কোডের কমপ্লেক্সিটি কমে যায় এবং দ্রুত অ্যাপ্লিকেশন ডেভেলপমেন্ট হয়।
- টাইপ সেফ কনফিগারেশন: অ্যানোটেশন-ভিত্তিক কনফিগারেশন টাইপ সেফ (type-safe) থাকে, অর্থাৎ মেথডের প্যারামিটার বা রিটার্ন টাইপ এর সঠিকতা নিশ্চিত করা হয়।
- কনফিগারেশন এক্সটেনশন: স্প্রিং অ্যানোটেশন ব্যবহারের মাধ্যমে নতুন কনফিগারেশন এক্সটেনশন আরও সহজ হয়ে ওঠে।
স্প্রিং এ Annotation-driven Configuration এর প্রধান অ্যানোটেশনসমূহ
স্প্রিং ফ্রেমওয়ার্কে অ্যানোটেশন-ভিত্তিক কনফিগারেশন পরিচালনার জন্য বেশ কিছু গুরুত্বপূর্ণ অ্যানোটেশন রয়েছে:
১. @Configuration
@Configuration অ্যানোটেশন স্প্রিং ক্লাসে ব্যবহৃত হয় যা স্প্রিং কনটেইনারে বিন কনফিগারেশন নির্দেশ করে। এই অ্যানোটেশনটি ক্লাসকে স্প্রিং কনফিগারেশন ক্লাস হিসেবে চিহ্নিত করে এবং স্প্রিং কনটেইনারে ক্লাসের মধ্যে থাকা মেথডগুলোকে বীন ডিফিনিশন হিসেবে ব্যবহৃত হতে দেয়।
উদাহরণ:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
এখানে, @Configuration অ্যানোটেশন দিয়ে AppConfig ক্লাসকে স্প্রিং কনফিগারেশন ক্লাস হিসেবে চিহ্নিত করা হয়েছে এবং @Bean অ্যানোটেশন ব্যবহার করে myService() মেথডে একটি বীন ডিফাইন করা হয়েছে।
২. @Component, @Service, @Repository, @Controller
স্প্রিংয়ের @Component এবং এর বিশেষায়িত ভ্যারিয়েন্ট যেমন @Service, @Repository, এবং @Controller অ্যানোটেশনগুলি স্প্রিং কনটেইনারে বীন ডিফাইনেশন হিসেবে ব্যবহৃত হয়।
@Component: সাধারণ স্প্রিং বীন হিসেবে ব্যবহৃত হয়।@Service: সার্ভিস লেয়ারের ক্লাসে ব্যবহৃত হয়।@Repository: ডেটা অ্যাক্সেস লেয়ারে ব্যবহৃত হয় (ডেটাবেস অপারেশনগুলো এক্সেপশন হ্যান্ডলিং সহ করা হয়)।@Controller: ওয়েব কন্ট্রোলার হিসেবে ব্যবহৃত হয়।
উদাহরণ:
import org.springframework.stereotype.Service;
@Service
public class MyServiceImpl implements MyService {
@Override
public void performService() {
System.out.println("Service is performed.");
}
}
এখানে, @Service অ্যানোটেশনটি MyServiceImpl ক্লাসকে স্প্রিং কনটেইনারে একটি সার্ভিস বীন হিসেবে নিবন্ধিত করে।
৩. @Autowired
@Autowired অ্যানোটেশন স্প্রিং কনটেইনার থেকে ডিপেনডেন্সি ইনজেকশনের জন্য ব্যবহৃত হয়। এটি ক্লাসের প্যারামিটার, কনস্ট্রাকটর অথবা ফিল্ডে ডিপেনডেন্সি ইনজেক্ট করতে ব্যবহার করা হয়।
উদাহরণ:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MyController {
private MyService myService;
@Autowired
public MyController(MyService myService) {
this.myService = myService;
}
public void handleRequest() {
myService.performService();
}
}
এখানে, @Autowired ব্যবহার করে MyService ইন্টারফেসের ইনস্ট্যান্স MyController ক্লাসে ইনজেক্ট করা হচ্ছে।
৪. @Bean
@Bean অ্যানোটেশন স্প্রিং কনফিগারেশন ক্লাসে ব্যবহৃত হয় এবং এটি স্প্রিং কনটেইনারে একটি বীন ডিফাইন করার জন্য ব্যবহৃত হয়। যখন @Bean অ্যানোটেশন ব্যবহার করা হয়, তখন স্প্রিং সেই মেথডের রিটার্ন ভ্যালুকে বীন হিসেবে রেজিস্টার করে।
উদাহরণ:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
এখানে, @Bean অ্যানোটেশনটি myService() মেথডের মাধ্যমে MyServiceImpl ক্লাসের একটি বীন তৈরি করছে।
৫. @EnableAspectJAutoProxy
স্প্রিং এওপি (AOP) ব্যবহারের জন্য @EnableAspectJAutoProxy অ্যানোটেশন ব্যবহৃত হয়। এটি স্প্রিং কনটেইনারে AOP প্রসেসিং সক্ষম করে এবং AspectJ অ্যানোটেশন সমর্থন করে।
উদাহরণ:
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
// AOP configuration here
}
এখানে, @EnableAspectJAutoProxy অ্যানোটেশনটি স্প্রিং কনটেইনারে AOP সক্রিয় করেছে।
স্প্রিং কনফিগারেশনে Annotation-driven Configuration ব্যবহার করা
স্প্রিং কনফিগারেশনে অ্যানোটেশন ব্যবহারের মাধ্যমে কনফিগারেশনটি আরও সহজ ও পরিষ্কার করা সম্ভব। এখানে, @Configuration ক্লাসে বিভিন্ন বীন ডিফাইন করা হয় এবং @Autowired এর মাধ্যমে ডিপেনডেন্সি ইনজেকশন সঞ্চালিত হয়।
উদাহরণ:
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
এখানে, @ComponentScan অ্যানোটেশনটি স্প্রিং কনটেইনারকে com.example প্যাকেজের মধ্যে সকল কম্পোনেন্ট বা বীন খুঁজতে বলে এবং @Bean এর মাধ্যমে স্প্রিং কনটেইনারে MyService বীন ডিফাইন করা হয়।
সারাংশ
স্প্রিং ফ্রেমওয়ার্কের মধ্যে Annotation-driven configuration একটি অত্যন্ত শক্তিশালী বৈশিষ্ট্য, যা XML কনফিগারেশন এর পরিবর্তে সরাসরি জাভা ক্লাসে অ্যানোটেশন ব্যবহার করে কনফিগারেশন তৈরি করার সুবিধা দেয়। এতে কোডের মডুলারিটি, পরিষ্কারতা এবং পারফরম্যান্স উন্নত হয়। স্প্রিং এর প্রধান অ্যানোটেশন-ভিত্তিক কনফিগারেশন অ্যানোটেশনগুলো যেমন @Configuration, @Component, @Service, @Repository, @Controller, @Autowired, @Bean ইত্যাদি স্প্রিং কনফিগারেশন আরও সহজ, পরিষ্কার এবং মডুলার তৈরি করে।
Read more