Spring Expression Language (SpEL) হল একটি শক্তিশালী এক্সপ্রেশন ভাষা যা Spring Framework এর অংশ হিসেবে ব্যবহৃত হয়। এটি Spring অ্যাপ্লিকেশনে জাভা অবজেক্ট, প্রপার্টি, মেথড, কোলেকশন ইত্যাদি এক্সপ্রেস করার জন্য সহজ এবং নমনীয় উপায় সরবরাহ করে। SpEL সাধারণত Spring Bean কনফিগারেশন, XML ফাইল এবং অ্যানোটেশনগুলির মধ্যে ডাইনামিক এক্সপ্রেশন নির্ধারণ করতে ব্যবহৃত হয়।
SpEL এর মৌলিক ধারণা
SpEL, যেটি Spring Expression Language নামে পরিচিত, একটি ইন্টারপ্রেটেড ভাষা যা Spring অ্যাপ্লিকেশনে বিভিন্ন ধরনের এক্সপ্রেশন ইভ্যালুয়েশন করে। SpEL দ্বারা আপনি:
- JavaBeans প্রপার্টি অ্যাক্সেস করতে পারেন।
- মেথড কল করতে পারেন।
- কন্ডিশনাল এক্সপ্রেশন তৈরি করতে পারেন।
- কোলেকশন এবং ম্যাপ প্রপার্টি ব্যবহার করতে পারেন।
- অঙ্ক গাণিতিক বা যৌক্তিক অপারেশন করতে পারেন।
SpEL এর মাধ্যমে আপনি Spring কনফিগারেশন ফাইল, অ্যানোটেশন বা মেথড প্যারামিটারেও এক্সপ্রেশন ব্যবহার করতে পারেন।
SpEL এবং Spring এর মধ্যে সম্পর্ক
SpEL এর প্রধান উদ্দেশ্য হল Spring Framework-এর ভিতরে ডাইনামিক এক্সপ্রেশন বা কনফিগারেশন পরিচালনা করা। Spring এর বিভিন্ন মডিউলে SpEL ব্যবহৃত হয়, যেমন Spring Core, Spring Security, Spring Data, Spring MVC ইত্যাদি। নিচে SpEL এবং Spring এর সম্পর্ক ব্যাখ্যা করা হলো:
১. Spring Bean Configuration-এ SpEL ব্যবহার
Spring Bean কনফিগারেশন ফাইলে SpEL ব্যবহার করে ডাইনামিক মান নির্ধারণ করা যায়। XML কনফিগারেশন অথবা @Value অ্যানোটেশনের মাধ্যমে SpEL এক্সপ্রেশন ব্যবহৃত হয়।
উদাহরণ: XML কনফিগারেশন ফাইলে SpEL
<bean id="employee" class="com.example.Employee">
<property name="name" value="#{T(java.lang.Math).random() > 0.5 ? 'John' : 'Jane'}" />
</bean>
বর্ণনা: এখানে SpEL এর মাধ্যমে ডাইনামিকভাবে নাম সেট করা হয়েছে। যদি Math.random() ০.৫ এর চেয়ে বড় হয়, তাহলে নাম 'John' হবে, অন্যথায় 'Jane'।
২. Spring Annotations-এ SpEL ব্যবহার
SpEL Spring অ্যানোটেশনে ডাইনামিক প্রপার্টি অ্যাসাইন করতে ব্যবহার করা যায়। @Value অ্যানোটেশন এর মাধ্যমে SpEL এক্সপ্রেশন অ্যাসাইন করা যায়।
উদাহরণ: @Value অ্যানোটেশন
@Component
public class Employee {
@Value("#{T(java.lang.Math).random() > 0.5 ? 'John' : 'Jane'}")
private String name;
public String getName() {
return name;
}
}
বর্ণনা: এখানে SpEL এর মাধ্যমে name প্রপার্টিতে ডাইনামিক মান অ্যাসাইন করা হয়েছে। স্পষ্টভাবে SpEL এক্সপ্রেশন @Value এর মধ্যে নির্দিষ্ট করা হয়েছে।
৩. Spring Security-তে SpEL ব্যবহার
Spring Security-তে SpEL ব্যবহার করে নিরাপত্তা কনফিগারেশনে ডাইনামিক এক্সপ্রেশন নির্ধারণ করা যায়। এটি অনুমতি, প্রিভিলেজ এবং অ্যাক্সেস কন্ট্রোল নিয়ন্ত্রণ করতে ব্যবহৃত হয়।
উদাহরণ: SpEL ব্যবহার করে Spring Security কনফিগারেশন
<http>
<authorize-requests>
<intercept-url pattern="/admin/**" access="hasRole('ADMIN') and T(java.lang.System).currentTimeMillis() % 2 == 0" />
<intercept-url pattern="/user/**" access="hasRole('USER')" />
</authorize-requests>
</http>
বর্ণনা: এখানে SpEL ব্যবহার করে শুধুমাত্র ADMIN রোলের ব্যবহারকারীরা "/admin/**" প্যাটার্নের URL অ্যাক্সেস করতে পারবে, তবে এর সাথে একটি কন্ডিশন যুক্ত করা হয়েছে যাতে কেবলমাত্র নির্দিষ্ট সময়ে (যখন সিস্টেমের বর্তমান টাইমস্ট্যাম্প পারফেক্টলি ডিভাইড হয়) এক্সেস পাওয়া যাবে।
৪. Spring Data-তে SpEL ব্যবহার
Spring Data এর সাথে SpEL ব্যবহার করে ডাইনামিক কুয়েরি তৈরি করা যায়। এটি JPA রেপোজিটরির মধ্যে কুয়েরি এক্সপ্রেশন তৈরি করতে সাহায্য করে।
উদাহরণ: Spring Data Repository-তে SpEL
@Query("SELECT e FROM Employee e WHERE e.salary > #{T(java.lang.Double).parseDouble('50000')}")
List<Employee> findEmployeesWithSalaryGreaterThan();
বর্ণনা: এখানে SpEL ব্যবহার করে কুয়েরি এক্সপ্রেশন তৈরি করা হয়েছে, যেখানে সেলরি ৫০,০০০ এর বেশি এমন এমপ্লয়িদের তালিকা ফেচ করা হবে।
৫. Spring Bean Validation-এ SpEL ব্যবহার
Spring Bean Validation এ SpEL ব্যবহার করা যেতে পারে জাভা অবজেক্টের বৈধতা যাচাই করতে। Spring Validation অ্যানোটেশনগুলির মাধ্যমে SpEL ব্যবহার করা যায়।
উদাহরণ: @AssertTrue অ্যানোটেশন ব্যবহার করে SpEL
public class Employee {
@AssertTrue(message = "Salary must be greater than 1000")
private boolean isSalaryValid() {
return salary > 1000;
}
}
বর্ণনা: এখানে SpEL ব্যবহার করে isSalaryValid() মেথডের মধ্যে একটি কন্ডিশন পরীক্ষা করা হয়েছে। যখন স্যালারি ১০০০ এর বেশি হবে, তখন এই টেস্টটি সত্য হবে।
SpEL এর সুবিধা
- ডাইনামিক এক্সপ্রেশন: SpEL আপনাকে Spring কনফিগারেশন, জাভা কোড বা অ্যানোটেশনে ডাইনামিক এক্সপ্রেশন ব্যবহার করতে দেয়।
- পাওয়ারফুল এক্সপ্রেশন: গাণিতিক, যৌক্তিক এবং স্ট্রিং অপারেশন এক্সপ্রেশনগুলির মাধ্যমে বিভিন্ন ধরনের কার্যকলাপ করতে পারে।
- বহুমুখী ব্যবহার: Spring Beans, Spring Security, Spring Data, Spring Validation সহ Spring Framework-এর বিভিন্ন অংশে SpEL ব্যবহৃত হয়।
সারাংশ
Spring Expression Language (SpEL) হল Spring Framework-এ ব্যবহৃত একটি শক্তিশালী এবং নমনীয় এক্সপ্রেশন ভাষা যা ডাইনামিক এক্সপ্রেশন ও কনফিগারেশন প্রক্রিয়াগুলির মধ্যে ব্যবহৃত হয়। Spring-এর বিভিন্ন মডিউলে, যেমন Spring Bean কনফিগারেশন, Spring Security, Spring Data ইত্যাদিতে SpEL ব্যবহৃত হয়। এটি Spring অ্যাপ্লিকেশনগুলিকে আরও শক্তিশালী, কাস্টমাইজযোগ্য এবং ডাইনামিক করে তোলে।