স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ (SpEL) হলো একটি শক্তিশালী এক্সপ্রেশন ল্যাঙ্গুয়েজ যা স্প্রিং ফ্রেমওয়ার্কে ব্যবহৃত হয়, এবং এটি ডাইনামিক এক্সপ্রেশন ইভ্যালুয়েশন এবং কনফিগারেশন ম্যানিপুলেশন করতে ব্যবহৃত হয়। স্প্রিং বুট (Spring Boot) এর মাধ্যমে অ্যাপ্লিকেশন দ্রুত এবং সহজে ডেভেলপ করা যায়, যেখানে SpEL-কে কনফিগারেশন, ডেটা অ্যাক্সেস, এবং ডাইনামিক এক্সপ্রেশন প্রসেসিংয়ের জন্য ব্যবহার করা হয়। স্প্রিং বুটের সঙ্গে SpEL এর ইন্টিগ্রেশন অ্যাপ্লিকেশন ডেভেলপমেন্টে আরও শক্তিশালী এবং নমনীয় সমাধান প্রদান করে।
SpEL এবং Spring Boot এর ইন্টিগ্রেশন
স্প্রিং বুটে SpEL এক্সপ্রেশন ব্যবহারের অনেক সুবিধা রয়েছে, যেমন:
- প্রোপার্টি এবং কনফিগারেশন ডাইনামিক্যালি রিড এবং সেট করা।
- কাস্টম ফাংশন ডিফাইন করে স্প্রিং কনটেইনারের মধ্যে ব্যবহার করা।
- ডাইনামিক ভ্যালু এসাইনমেন্ট, গাণিতিক এবং স্ট্রিং অপারেশন।
- বিন-টু-বিন ডিপেনডেন্সি এবং রেফারেন্স অ্যাক্সেস।
১. SpEL এবং Spring Boot এর সাথে প্রোপার্টি অ্যাক্সেস
স্প্রিং বুটের application.properties বা application.yml ফাইল থেকে প্রোপার্টি ভ্যালু ডাইনামিকভাবে SpEL ব্যবহার করে অ্যাক্সেস করা যায়।
উদাহরণ: application.properties থেকে SpEL ব্যবহার
app.greetingMessage=Hello, ${user.name}!
স্প্রিং বুট কনফিগারেশন ফাইলে স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজ ব্যবহার করে:
@Component
public class GreetingService {
@Value("${app.greetingMessage}")
private String greetingMessage;
public String getGreetingMessage() {
return greetingMessage;
}
}
এখানে, greetingMessage প্রোপার্টিটি SpEL এর মাধ্যমে অ্যাক্সেস করা হচ্ছে এবং ${user.name} এর মান কনফিগারেশন থেকে ইনজেক্ট হচ্ছে। যেটি ব্যবহারকারী নাম দ্বারা পূর্ণ হবে।
২. SpEL ব্যবহার করে কাস্টম ফাংশন তৈরি করা
স্প্রিং বুট অ্যাপ্লিকেশনে SpEL দিয়ে কাস্টম ফাংশন তৈরি করে তা ব্যবহার করা যায়। MethodInvokingFactoryBean এর মাধ্যমে কাস্টম ফাংশন রেজিস্টার করা যেতে পারে এবং স্প্রিং কনটেইনার থেকে SpEL এক্সপ্রেশন ব্যবহার করে কল করা যায়।
উদাহরণ: কাস্টম ফাংশন তৈরি এবং SpEL এ ব্যবহার
Step ১: কাস্টম ফাংশন ক্লাস তৈরি
public class MathFunctions {
public int addNumbers(int num1, int num2) {
return num1 + num2;
}
public String greet(String name) {
return "Hello, " + name + "!";
}
}
Step ২: ফাংশন ক্লাস স্প্রিং কনটেইনারে রেজিস্টার করা
@Configuration
public class AppConfig {
@Bean
public MathFunctions mathFunctions() {
return new MathFunctions();
}
}
Step ৩: SpEL দিয়ে কাস্টম ফাংশন কল
@Component
public class MathService {
@Value("#{mathFunctions.addNumbers(5, 10)}")
private int sum;
@Value("#{mathFunctions.greet('John')}")
private String greeting;
public int getSum() {
return sum;
}
public String getGreeting() {
return greeting;
}
}
এখানে, SpEL এক্সপ্রেশন mathFunctions.addNumbers(5, 10) এবং mathFunctions.greet('John') কাস্টম মেথডগুলি কল করছে, এবং ফলাফল হিসাবে sum এবং greeting প্রোপার্টি সেট হচ্ছে।
৩. SpEL দিয়ে Bean Access
স্প্রিং বুটের মধ্যে SpEL ব্যবহার করে স্প্রিং কনটেইনারের Bean গুলোর প্রোপার্টি অ্যাক্সেস করা সম্ভব।
উদাহরণ: Bean Access using SpEL
Step ১: Bean তৈরি
@Component
public class User {
private String name = "Alice";
public String getName() {
return name;
}
}
Step ২: SpEL ব্যবহার করে Bean এর প্রোপার্টি অ্যাক্সেস
@Component
public class UserService {
@Value("#{user.name}")
private String userName;
public String getUserName() {
return userName;
}
}
এখানে, user.name SpEL এক্সপ্রেশনটি User Bean এর name প্রোপার্টি অ্যাক্সেস করছে। স্প্রিং কনটেইনারের মধ্যে রেজিস্টার করা User Bean এর name প্রোপার্টি SpEL এক্সপ্রেশন দ্বারা ডাইনামিকভাবে ইনজেক্ট করা হচ্ছে।
৪. SpEL এবং Bean Scopes
স্প্রিং বুটের মধ্যে SpEL ব্যবহার করে Bean Scopes নির্ধারণ করা যেতে পারে। যেমন Singleton, Prototype, Request, Session ইত্যাদি।
উদাহরণ: Singleton Bean Scope এর SpEL ব্যবহার
@Component
@Scope("singleton")
public class SingletonBean {
public String getScope() {
return "I am a Singleton Bean!";
}
}
এখানে, SpEL এর মাধ্যমে আপনি স্প্রিং কনটেইনারে Singleton Bean এর স্কোপ অ্যাক্সেস করতে পারেন।
৫. SpEL ব্যবহার করে কন্ডিশনাল এক্সপ্রেশন
SpEL ব্যবহার করে শর্তসাপেক্ষ (conditional) এক্সপ্রেশন তৈরি করা যায়।
উদাহরণ: কন্ডিশনাল SpEL
@Value("#{2 > 1 ? 'True' : 'False'}")
private String result;
এখানে, SpEL 2 > 1 শর্তটি পরীক্ষা করছে এবং যদি শর্ত সত্য হয় তাহলে True রিটার্ন করবে, অন্যথায় False রিটার্ন করবে।
উপসংহার
স্প্রিং বুট এবং SpEL এক্সপ্রেশন ভাষার মাধ্যমে স্প্রিং কনটেইনারে থাকা Bean, প্রোপার্টি, কাস্টম ফাংশন এবং শর্তসাপেক্ষ এক্সপ্রেশনগুলোর ডাইনামিক অ্যাক্সেস এবং ব্যবহার অত্যন্ত সহজ হয়। SpEL এর মাধ্যমে অ্যাপ্লিকেশন কনফিগারেশন, ডেটা অ্যাক্সেস এবং কাস্টম লজিক ব্যবহার আরো নমনীয় এবং কনফিগারেবল হয়ে ওঠে। স্প্রিং বুটে SpEL এর ইন্টিগ্রেশন প্রক্রিয়াটি কোডের দক্ষতা বৃদ্ধি এবং অ্যাপ্লিকেশনের কার্যক্ষমতা উন্নত করতে সহায়ক।
Spring Expression Language (SpEL) Spring Framework এর একটি শক্তিশালী উপাদান, যা Spring Boot অ্যাপ্লিকেশনগুলিতে ডাইনামিক এক্সপ্রেশন লেখার জন্য ব্যবহৃত হয়। SpEL ব্যবহার করে আপনি Spring Beans, প্রপার্টি, মেথড কল, কন্ডিশনাল লজিক এবং আরও অনেক কিছু কার্যকরভাবে পরিচালনা করতে পারেন।
Spring Boot-এ SpEL ব্যবহারের অনেক সুবিধা রয়েছে, যেমন প্রপার্টি ফাইলের মধ্যে SpEL এক্সপ্রেশন ব্যবহার করা, Spring Beans-এর সাথে এক্সপ্রেশন ম্যানিপুলেশন, এবং ডাইনামিক কনফিগারেশন ইত্যাদি।
Spring Boot এর মধ্যে SpEL ব্যবহার করার কিছু উদাহরণ
1. Spring Boot Application Properties-এ SpEL ব্যবহার
Spring Boot অ্যাপ্লিকেশনের application.properties বা application.yml ফাইলের মধ্যে SpEL এক্সপ্রেশন ব্যবহার করা যেতে পারে। এতে অ্যাপ্লিকেশনের প্রপার্টি ফাইলের ভ্যালু ডাইনামিকভাবে নির্ধারণ করা সম্ভব।
উদাহরণ: application.properties এ SpEL ব্যবহার
# Defining properties
app.name=Spring Boot Application
app.version=2.0
# Using SpEL to concatenate two properties
app.fullName=${app.name} - ${app.version}
এই উদাহরণে, ${app.name} - ${app.version} একটি SpEL এক্সপ্রেশন যা app.name এবং app.version এর মান একত্রিত করে। Spring Boot অ্যাপ্লিকেশন যখন চালানো হবে, তখন app.fullName এর মান হবে "Spring Boot Application - 2.0"।
2. SpEL ব্যবহার করে Bean Properties ম্যানিপুলেশন
Spring Boot অ্যাপ্লিকেশনগুলিতে, SpEL ব্যবহার করে Beans-এর প্রপার্টি ম্যানিপুলেশন খুব সহজ। আপনি Spring Bean এর প্রপার্টি বা মেথডকে SpEL এক্সপ্রেশন দ্বারা অ্যাক্সেস এবং ম্যানিপুলেট করতে পারেন।
উদাহরণ: Bean প্রপার্টি অ্যাক্সেস
ধরা যাক, আমাদের একটি Person ক্লাস রয়েছে, যেখানে name এবং age প্রপার্টি রয়েছে।
public class Person {
private String name;
private int age;
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter and Setter Methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String greet() {
return "Hello, " + name;
}
}
Spring Boot Bean কনফিগারেশন
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public Person person() {
return new Person("John", 25);
}
}
SpEL ব্যবহার করে Bean Properties অ্যাক্সেস করা
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class SpELBeanExample {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// SpEL expression parser
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext evaluationContext = new StandardEvaluationContext();
// Accessing Bean property using SpEL
String name = parser.parseExpression("@person.name").getValue(evaluationContext, String.class);
System.out.println("Name: " + name); // Output: Name: John
// Calling method using SpEL
String greeting = parser.parseExpression("@person.greet()").getValue(evaluationContext, String.class);
System.out.println(greeting); // Output: Hello, John
}
}
এই উদাহরণে, @person.name এবং @person.greet() এর মাধ্যমে Person Bean-এর প্রপার্টি এবং মেথড অ্যাক্সেস করা হয়েছে।
3. Conditional Logic with SpEL in Spring Boot
SpEL ব্যবহার করে conditional expressions তৈরি করা যায়, যা Spring Beans এবং অন্যান্য অ্যাক্সেসযোগ্য ভ্যালুর ভিত্তিতে লজিকাল শর্ত প্রদান করতে পারে।
উদাহরণ: SpEL দিয়ে Conditional Expression
ধরা যাক, আমাদের একটি PriceService ক্লাস রয়েছে, যেখানে আমরা কোনও পণ্যের মূল্য অ্যাক্সেস করতে চাই, এবং SpEL ব্যবহার করে মূল্য শর্তসাপেক্ষভাবে পরিবর্তন করব।
public class PriceService {
public double calculateDiscountedPrice(double price, boolean isSale) {
if (isSale) {
return price * 0.9; // 10% discount during sale
}
return price; // No discount
}
}
Spring Bean কনফিগারেশন
@Configuration
public class AppConfig {
@Bean
public PriceService priceService() {
return new PriceService();
}
}
SpEL Conditional Expression
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class SpELConditionalExample {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// SpEL expression parser
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext evaluationContext = new StandardEvaluationContext();
// Accessing the Bean
evaluationContext.setVariable("priceService", context.getBean("priceService"));
// Applying conditional SpEL expression to calculate price
double discountedPrice = parser.parseExpression("@priceService.calculateDiscountedPrice(100, true)").getValue(evaluationContext, Double.class);
System.out.println("Discounted Price: " + discountedPrice); // Output: Discounted Price: 90.0
}
}
এখানে, SpEL এক্সপ্রেশনটি calculateDiscountedPrice মেথডে পাস করা আর্গুমেন্টের ভিত্তিতে শর্তসাপেক্ষ মূল্য নির্ধারণ করেছে।
সারাংশ
Spring Boot-এ Spring Expression Language (SpEL) ব্যবহার করে আপনি ডাইনামিক এক্সপ্রেশন এবং কনফিগারেশন করতে পারেন। এটি Spring Beans-এর প্রপার্টি অ্যাক্সেস, মেথড কল, কন্ডিশনাল লজিক, এবং অন্যান্য এক্সপ্রেশন সমর্থন করে যা অ্যাপ্লিকেশনকে আরও নমনীয় ও শক্তিশালী করে তোলে। SpEL ব্যবহার করে Spring Boot অ্যাপ্লিকেশনগুলির মধ্যে বিভিন্ন ধরনের কনফিগারেশন এবং এক্সপ্রেশন ম্যানিপুলেশন করতে পারেন, যা ডেভেলপমেন্ট প্রক্রিয়া অনেক সহজ এবং দ্রুত করে তোলে।
Spring Boot-এ Configuration Properties সাধারণত application.properties বা application.yml ফাইলে সংরক্ষিত কনফিগারেশন ডেটাকে Java ক্লাসের মাধ্যমে ম্যানেজ করা হয়। SpEL (Spring Expression Language) ব্যবহার করে আপনি কনফিগারেশন প্রপার্টি ফাইলের মানগুলি ডাইনামিকভাবে কাস্টমাইজ বা প্রসেস করতে পারেন।
Spring Boot এ SpEL ব্যবহার করে Configuration Properties হ্যান্ডেল করার মাধ্যমে, আপনি প্রপার্টির মানগুলোর উপর অপারেশন, গণনা, বা লজিক প্রয়োগ করতে পারেন, যা অ্যাপ্লিকেশনকে আরও ফ্লেক্সিবল এবং ডাইনামিক করে তোলে।
Spring Boot এ Configuration Properties এবং SpEL ব্যবহার
এখানে একটি উদাহরণ দেওয়া হয়েছে যে কীভাবে আপনি Spring Boot অ্যাপ্লিকেশনে @Value অ্যানোটেশন এবং SpEL ব্যবহার করে Configuration Properties সেটিংসকে কাস্টমাইজ বা প্রসেস করতে পারেন।
১. Application Properties এ SpEL ব্যবহার
ধরা যাক, আপনার application.properties বা application.yml ফাইলে কিছু কনফিগারেশন প্রপার্টি আছে এবং আপনি সেগুলির উপর SpEL প্রয়োগ করতে চান।
১.১. application.properties ফাইলের কনফিগারেশন
app.name=SpringBootApp
app.version=2.5
app.description=This is a Spring Boot application
app.numberOfUsers=100
এখানে কিছু কনফিগারেশন প্রপার্টি রয়েছে যেগুলি অ্যাপ্লিকেশনের নাম, ভার্সন, বর্ণনা এবং ব্যবহারকারীর সংখ্যা নিয়ে তথ্য প্রদান করে।
১.২. Spring Bean Class এ SpEL ব্যবহার
Spring Boot-এ @Value অ্যানোটেশন ব্যবহার করে SpEL এক্সপ্রেশন ব্যবহার করা যেতে পারে।
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class AppConfig {
@Value("${app.name}")
private String appName;
@Value("#{${app.version} + 1}") // SpEL: Increase version by 1
private double increasedVersion;
@Value("#{T(java.lang.Math).sqrt(${app.numberOfUsers})}") // SpEL: Square root of numberOfUsers
private double usersSqrt;
@Value("#{app.name + ' - ' + app.version}") // SpEL: Concatenate name and version
private String appDetails;
public void displayConfig() {
System.out.println("App Name: " + appName);
System.out.println("Increased Version: " + increasedVersion);
System.out.println("Square Root of Number of Users: " + usersSqrt);
System.out.println("App Details: " + appDetails);
}
}
এখানে:
@Value("${app.name}")একটি সাধারণ প্রপার্টি মান ইনজেক্ট করার জন্য ব্যবহৃত হয়।@Value("#{${app.version} + 1}")SpEL ব্যবহার করেapp.versionমানে ১ যোগ করা হচ্ছে।@Value("#{T(java.lang.Math).sqrt(${app.numberOfUsers})}")SpEL ব্যবহার করেapp.numberOfUsersএর স্কয়ার রুট বের করা হচ্ছে।@Value("#{app.name + ' - ' + app.version}")SpEL ব্যবহার করেapp.nameএবংapp.versionএকত্রিত করা হচ্ছে।
১.৩. Spring Boot Application Class
Spring Boot অ্যাপ্লিকেশন ক্লাসে @ComponentScan ব্যবহার করে AppConfig ক্লাসের Bean কম্পোনেন্ট স্ক্যান করতে হবে।
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan
public class SpringBootApplicationExample implements CommandLineRunner {
private final AppConfig appConfig;
public SpringBootApplicationExample(AppConfig appConfig) {
this.appConfig = appConfig;
}
public static void main(String[] args) {
SpringApplication.run(SpringBootApplicationExample.class, args);
}
@Override
public void run(String... args) throws Exception {
appConfig.displayConfig();
}
}
১.৪. আউটপুট:
App Name: SpringBootApp
Increased Version: 3.5
Square Root of Number of Users: 10.0
App Details: SpringBootApp - 2.5
এখানে, SpEL ব্যবহার করে app.version এর মানে ১ যোগ করা হয়েছে, এবং app.numberOfUsers এর স্কয়ার রুট বের করা হয়েছে।
২. YAML ফাইলের মাধ্যমে Configuration Properties এবং SpEL ব্যবহার
Spring Boot-এ YAML ফাইলও ব্যবহার করা যেতে পারে কনফিগারেশন প্রপার্টি সংরক্ষণের জন্য। এখানে একটি YAML কনফিগারেশন ফাইলের উদাহরণ দেওয়া হলো।
২.১. application.yml ফাইলের কনফিগারেশন
app:
name: SpringBootApp
version: 2.5
description: This is a Spring Boot application
numberOfUsers: 100
২.২. Spring Bean Class এ SpEL ব্যবহার
application.yml থেকে একইভাবে SpEL ব্যবহার করা যেতে পারে:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class AppConfig {
@Value("${app.name}")
private String appName;
@Value("#{${app.version} + 1}")
private double increasedVersion;
@Value("#{T(java.lang.Math).sqrt(${app.numberOfUsers})}")
private double usersSqrt;
@Value("#{app.name + ' - ' + app.version}")
private String appDetails;
public void displayConfig() {
System.out.println("App Name: " + appName);
System.out.println("Increased Version: " + increasedVersion);
System.out.println("Square Root of Number of Users: " + usersSqrt);
System.out.println("App Details: " + appDetails);
}
}
এখানে একইভাবে application.yml থেকে প্রপার্টি ইনজেক্ট করা হচ্ছে এবং SpEL ব্যবহার করে তাদের উপর গণনা করা হচ্ছে।
২.৩. আউটপুট:
App Name: SpringBootApp
Increased Version: 3.5
Square Root of Number of Users: 10.0
App Details: SpringBootApp - 2.5
সারাংশ
Spring Boot-এ Configuration Properties ফাইলে SpEL ব্যবহার করার মাধ্যমে আপনি প্রপার্টির মানগুলি ডাইনামিকভাবে প্রসেস, কাস্টমাইজ এবং গণনা করতে পারেন। @Value অ্যানোটেশন এবং SpEL এক্সপ্রেশন ব্যবহার করে আপনি সহজেই কনফিগারেশন ফাইলের মানগুলির উপর অপারেশন করতে পারেন, যা আপনার অ্যাপ্লিকেশনকে আরও ফ্লেক্সিবল এবং কাস্টমাইজেবল করে তোলে। SpEL-এর মাধ্যমে আপনি যেকোনো প্রপার্টির মানকে পরিবর্তন করতে, প্রসেস করতে, গণনা করতে এবং স্ট্রিং কনক্যাটেনেশন করতে পারেন, যা আপনার Spring Boot অ্যাপ্লিকেশনকে আরও শক্তিশালী ও ডাইনামিক করতে সাহায্য করবে।
Spring Boot এবং Spring Expression Language (SpEL) এর ইন্টিগ্রেশন একটি শক্তিশালী পদ্ধতি, যা Spring Boot অ্যাপ্লিকেশনে ডাইনামিক কনফিগারেশন, ডেটা প্রসেসিং এবং অন্যান্য অপারেশন সহজে সম্পাদন করতে সহায়ক। SpEL-কে Spring Boot-এ কার্যকরীভাবে ব্যবহার করতে, আপনি @Value, @Bean, @ConfigurationProperties সহ অনেক Spring Annotations এর মাধ্যমে SpEL এক্সপ্রেশনগুলি ইনজেক্ট এবং কার্যকর করতে পারেন।
এখানে, আমরা একটি Spring Boot অ্যাপ্লিকেশন তৈরি করব যেখানে SpEL এর সাথে ইন্টিগ্রেশন দেখানো হবে এবং কীভাবে SpEL ব্যবহার করে ডাইনামিকভাবে মান ইনজেক্ট করা যায় তা উদাহরণসহ ব্যাখ্যা করা হবে।
Spring Boot এবং SpEL ইন্টিগ্রেশন
১. Spring Boot প্রকল্প তৈরি করা
প্রথমে, Spring Initializr (https://start.spring.io/) ব্যবহার করে একটি Spring Boot প্রকল্প তৈরি করুন। নিচে কয়েকটি প্রাথমিক ডিপেন্ডেন্সি দেওয়া হলো:
- Spring Web: REST API তৈরি করার জন্য
- Spring Boot DevTools: ডেভেলপমেন্টে সাহায্য করার জন্য
- Spring Configuration Processor: কনফিগারেশন প্রপার্টির জন্য
এছাড়া Maven বা Gradle ডিপেন্ডেন্সি ফাইলের মাধ্যমে প্রয়োজনীয় লাইব্রেরিগুলো যোগ করা হবে।
২. Maven ডিপেন্ডেন্সি যোগ করা
pom.xml ফাইলে নিচের ডিপেন্ডেন্সি যোগ করুন:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
এটি Spring Boot অ্যাপ্লিকেশন তৈরি করতে সাহায্য করবে।
৩. SpEL ব্যবহার করে @Value Annotation
SpEL এক্সপ্রেশন ব্যবহার করে Spring Boot অ্যাপ্লিকেশনে ডাইনামিক মান Inject করার জন্য @Value Annotation ব্যবহার করা হয়। নিচে একটি উদাহরণ দেখানো হলো।
উদাহরণ ১: @Value এবং SpEL ব্যবহার
package com.example.spel;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class SpelApplication {
public static void main(String[] args) {
SpringApplication.run(SpelApplication.class, args);
}
@Bean
public CommandLineRunner run(@Value("#{20 * 5}") int result) {
return args -> {
System.out.println("SpEL Calculation Result: " + result); // Output: 100
};
}
}
এখানে:
@Value("#{20 * 5}")SpEL এক্সপ্রেশন ব্যবহার করেresultফিল্ডে ২০ * ৫ এর মান (১০০) Inject করা হয়েছে।CommandLineRunnerBean ব্যবহার করে Spring Boot অ্যাপ্লিকেশন রান হওয়ার পর SpEL এর মাধ্যমে ইনজেক্ট করা মান প্রিন্ট করা হচ্ছে।
স্পষ্টীকরণ:
- SpEL এর মাধ্যমে
20 * 5গাণিতিক অপারেশন করা হচ্ছে এবং সেই মানresultফিল্ডে Inject হচ্ছে।
৪. SpEL ব্যবহার করে কনফিগারেশন ফাইল থেকে মান Inject করা
Spring Boot অ্যাপ্লিকেশনে SpEL ব্যবহার করে কনফিগারেশন ফাইল থেকে মান Inject করা যেতে পারে।
উদাহরণ ২: application.properties ফাইল ব্যবহার
product.price=200
product.discount=0.1
এখন, এই প্রপার্টি ফাইল থেকে SpEL ব্যবহার করে ডাইনামিকভাবে মান ইনজেক্ট করা যাবে।
package com.example.spel;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpelApplication {
public static void main(String[] args) {
SpringApplication.run(SpelApplication.class, args);
}
@Bean
public CommandLineRunner run(@Value("${product.price}") double price,
@Value("#{${product.price} * ${product.discount}}") double discount) {
return args -> {
System.out.println("Product Price: " + price); // Output: 200.0
System.out.println("Discounted Price: " + discount); // Output: 20.0
};
}
}
এখানে:
@Value("${product.price}")ব্যবহার করে কনফিগারেশন ফাইল থেকেproduct.priceএর মান (২০০) Inject করা হচ্ছে।@Value("#{${product.price} * ${product.discount}}")SpEL ব্যবহার করেproduct.priceএবংproduct.discountএর ভিত্তিতে একটি গাণিতিক অপারেশন (২০০ * ০.১) সম্পাদিত হচ্ছে।
৫. SpEL এবং Bean Definition
Spring Boot এর @Bean Annotation এর সাথে SpEL ব্যবহার করা যেতে পারে ডাইনামিকভাবে Bean তৈরির সময়।
উদাহরণ ৩: SpEL এবং @Bean ব্যবহার
package com.example.spel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public int productPrice() {
return 50 * 2; // SpEL equivalent to "#{50 * 2}"
}
}
এখানে productPrice() Bean তৈরি হচ্ছে, এবং SpEL এক্সপ্রেশন 50 * 2 ব্যবহার করে Bean এর মান ১০০ সেট করা হচ্ছে।
উপসংহার
Spring Boot এবং SpEL এর ইন্টিগ্রেশন আপনার অ্যাপ্লিকেশনে ডাইনামিক কনফিগারেশন, গণনা, এবং ডেটা প্রসেসিং সহজ করে তোলে। @Value, @Bean, @ConfigurationProperties, এবং অন্যান্য Spring Annotations ব্যবহার করে SpEL এক্সপ্রেশন সন্নিবেশিত করে আপনি Spring Beans এবং কনফিগারেশন ভ্যালুগুলি ডাইনামিকভাবে পরিচালনা করতে পারেন। এটি Spring Boot অ্যাপ্লিকেশনকে আরও শক্তিশালী এবং নমনীয় করে তোলে।
Read more