Spring Expression Language (SpEL) এবং @Value অ্যানোটেশন একত্রে ব্যবহার করে Spring Beans-এ Expression Injection করা সম্ভব। @Value অ্যানোটেশন ব্যবহার করে SpEL এক্সপ্রেশন ইনজেক্ট করা হয় যা Spring কনফিগারেশন ফাইল বা ক্লাসের মধ্যে ডাইনামিক ভ্যালু ইনজেক্ট করতে সহায়ক। এটি Spring Beans-এর প্রপার্টি বা ফিল্ডে এক্সপ্রেশন ভিত্তিক মান ইনজেক্ট করার একটি সুবিধাজনক পদ্ধতি।
@Value অ্যানোটেশন কি?
@Value অ্যানোটেশন Spring Framework-এ ব্যবহৃত হয় যেকোনো Bean-এ কনস্ট্রাকটর, ফিল্ড বা মেথডের মাধ্যমে প্রপার্টি বা ভ্যালু ইনজেক্ট করার জন্য। এটি সাধারণত application.properties বা application.yml ফাইল থেকে মান পড়তে ব্যবহৃত হয়, তবে SpEL (Spring Expression Language) এর মাধ্যমে ডাইনামিক ভ্যালু ইনজেক্ট করাও সম্ভব।
Expression Injection using @Value with SpEL
SpEL ব্যবহার করে @Value অ্যানোটেশন এর মাধ্যমে এক্সপ্রেশন ইনজেক্ট করার জন্য ${} সেন্ট্যাক্স ব্যবহার করা হয়। এটির মাধ্যমে Spring Beans-এর ফিল্ড বা প্রপার্টিতে ডাইনামিক মান ইনজেক্ট করা যায়।
সেন্ট্যাক্স:
@Value("#{expression}")
এখানে, expression একটি SpEL এক্সপ্রেশন হতে হবে যা ডাইনামিক মান তৈরি করবে।
@Value অ্যানোটেশন ব্যবহার করে SpEL Expression Injection এর উদাহরণ
1. Basic Example
এখানে একটি সাধারণ উদাহরণ দেখানো হয়েছে যেখানে SpEL এক্সপ্রেশন ব্যবহার করে একটি Bean-এর প্রপার্টি ইনজেক্ট করা হচ্ছে:
উদাহরণ: SpEL ব্যবহার করে String ইনজেকশন
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Product {
@Value("#{2 * 10}")
private int price;
public int getPrice() {
return price;
}
}
এখানে, @Value("#{2 * 10}") SpEL এক্সপ্রেশনটি 2 * 10 এর মান 20 ইনজেক্ট করবে এবং এটি price প্রপার্টিতে সেভ হবে। getPrice() মেথডের মাধ্যমে এটি আউটপুট হিসেবে ২০ রিটার্ন করবে।
2. Property File থেকে Value Inject করা
application.properties বা application.yml ফাইল থেকে মান ইনজেক্ট করতে @Value অ্যানোটেশন ব্যবহার করা হয়। SpEL এক্সপ্রেশন ব্যবহার করে ডাইনামিক মানও ইনজেক্ট করা যায়।
উদাহরণ: application.properties থেকে মান ইনজেকশন
application.properties:
product.name=Laptop
product.discount=10
উদাহরণ: @Value অ্যানোটেশন ব্যবহার করে Inject করা
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Product {
@Value("${product.name}")
private String name;
@Value("#{${product.discount} * 0.1}")
private double discount;
public String getName() {
return name;
}
public double getDiscount() {
return discount;
}
}
এখানে, @Value("${product.name}") এবং @Value("#{${product.discount} * 0.1}") ব্যবহার করে application.properties ফাইল থেকে name এবং discount এর মান ইনজেক্ট করা হয়েছে। discount ফিল্ডে SpEL এক্সপ্রেশন ব্যবহার করা হয়েছে যেখানে 10 * 0.1 (যার মান হবে ১) রিটার্ন করবে।
3. Complex Expression Injection
SpEL এর মাধ্যমে আরও জটিল এক্সপ্রেশন এবং লজিক ব্যবহার করা সম্ভব, যেমন:
উদাহরণ: SpEL দিয়ে Conditional Expression
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class User {
@Value("#{user.age > 18 ? 'Adult' : 'Minor'}")
private String status;
private int age;
public String getStatus() {
return status;
}
public void setAge(int age) {
this.age = age;
}
}
এখানে, user.age এর উপর ভিত্তি করে একটি শর্ত চেক করা হচ্ছে, যদি বয়স ১৮-এর বেশি হয় তাহলে status হবে 'Adult', অন্যথায় 'Minor' হবে। user.age এখানে SpEL এক্সপ্রেশন হিসেবে ব্যবহার করা হয়েছে।
4. Injecting Bean References
Spring Beans-এর মধ্যে একে অপরকে রেফারেন্স করতে SpEL ব্যবহার করা যায়।
উদাহরণ: Injecting Bean Reference
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Order {
@Value("#{product.name}")
private String productName;
public String getProductName() {
return productName;
}
}
এখানে, product.name Spring Bean-এর Product ক্লাস থেকে name প্রপার্টি ইনজেক্ট করা হয়েছে।
সার্বিক উপসংহার
@Value অ্যানোটেশন এবং SpEL (Spring Expression Language) একত্রে ব্যবহার করে Spring Beans-এ Expression Injection একটি শক্তিশালী ফিচার। এটি ডাইনামিকভাবে প্রপার্টি বা ভ্যালু ইনজেক্ট করতে সক্ষম, যা Spring অ্যাপ্লিকেশনকে আরও নমনীয় এবং কাস্টমাইজযোগ্য করে তোলে। আপনি SpEL ব্যবহার করে static values, properties files থেকে ভ্যালু, conditional expressions, এবং bean references ইনজেক্ট করতে পারেন। এই পদ্ধতিটি Spring অ্যাপ্লিকেশনের মধ্যে আরও নমনীয়তা এবং কার্যকারিতা যোগ করে।