Spring 5.x সংস্করণে অনেক গুরুত্বপূর্ণ নতুন ফিচার যোগ করা হয়েছে, যা আধুনিক অ্যাপ্লিকেশন ডেভেলপমেন্টকে আরও সহজ এবং কার্যকরী করেছে। Spring WebFlux হল একটি নতুন প্রোগ্রামিং মডেল যা reactive programming ধারণার উপর ভিত্তি করে তৈরি, যা Spring MVC এর পরিপূরক এবং asynchronous অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য আদর্শ।
এখানে আমরা Spring 5.x এর নতুন ফিচার এবং Spring WebFlux এর উদাহরণ নিয়ে বিস্তারিত আলোচনা করবো।
Spring 5.x এর নতুন ফিচার
1. Reactive Programming Support: Spring WebFlux
Spring 5.x তে Spring WebFlux নামে একটি নতুন ফিচার যোগ করা হয়েছে, যা reactive programming এর ভিত্তিতে কাজ করে। এটি সিঙ্ক্রোনাস (blocking) এর পরিবর্তে অ্যাসিঙ্ক্রোনাস (non-blocking) প্রোগ্রামিং মডেল ব্যবহার করে।
- Spring WebFlux একটি fully reactive framework যা সার্ভার সাইড এবং ক্লায়েন্ট সাইড উভয় ক্ষেত্রেই non-blocking I/O প্রদান করে।
- এটি Project Reactor এবং RxJava ব্যবহার করে, যা অ্যাসিঙ্ক্রোনাস স্ট্রীমিং এবং রিয়্যাকটিভ ডেটা প্রক্রিয়া করে।
2. Functional Web Framework (Router Function)
Spring 5.x তে functional web framework বা Router Functions যোগ করা হয়েছে। এটি Spring MVC-এর传统 ফিচারের পরিবর্তে একটি নতুন ফাংশনাল API প্রদান করে, যা HTTP রাউটিং এবং কন্ট্রোলার মেথডের সাথে যোগাযোগ করার জন্য ফাংশনাল কোড ব্যবহারের সুযোগ দেয়।
3. Spring WebFlux (Non-blocking I/O)
Spring 5.x এ WebFlux একটি reactive programming module হিসেবে উপস্থিত হয়, যা reactive streams ধারণার উপর কাজ করে। এটি non-blocking I/O এবং asynchronous প্রোগ্রামিং সমর্থন করে, যা সিস্টেমের পারফরম্যান্স এবং স্কেলেবিলিটি বৃদ্ধি করে।
4. New Annotation Support
Spring 5.x এ নতুন অ্যানোটেশন যেমন @RequestMapping এর উপর ভিত্তি করে আরও কার্যকরী অ্যানোটেশন গুলি যোগ করা হয়েছে যেমন @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, ইত্যাদি, যা কোডের পঠনযোগ্যতা বৃদ্ধি করে।
5. Improved Support for Lambda Expressions
Spring 5.x তে Lambda expressions এবং Functional programming এর জন্য উন্নত সমর্থন যুক্ত করা হয়েছে, যা Java 8 এর সুবিধা গ্রহণ করতে সহায়ক।
6. Spring Security 5.x Integration
Spring 5.x তে Spring Security 5.x এ উন্নত সমর্থন এবং একাধিক নতুন ফিচার রয়েছে, যার মধ্যে OAuth 2.0 এবং JWT সমর্থন অন্তর্ভুক্ত, যা আধুনিক নিরাপত্তা প্রয়োজনীয়তা পূর্ণ করতে সাহায্য করে।
Spring WebFlux এর উদাহরণ:
Spring WebFlux হলো একটি রিয়্যাকটিভ ওয়েব ফ্রেমওয়ার্ক যা non-blocking I/O (input/output) প্রক্রিয়ার মাধ্যমে অনেক বেশি পারফর্মেন্স প্রদান করতে সক্ষম। এটি reactive programming এর ধারণা ব্যবহার করে এবং Project Reactor এর উপর ভিত্তি করে কাজ করে। এখানে একটি সাধারণ Spring WebFlux উদাহরণ দেখানো হলো।
1. Spring WebFlux Configuration
প্রথমে Spring WebFlux-কে কনফিগার করা যাক।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.config.EnableWebFlux;
import org.springframework.web.reactive.config.WebFluxConfigurer;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.ServerResponse;
import org.springframework.web.reactive.function.server.RouterFunctions;
@Configuration
@EnableWebFlux
public class WebConfig implements WebFluxConfigurer {
// Defining a simple router function
@Bean
public RouterFunction<ServerResponse> route() {
return RouterFunctions.route()
.GET("/hello", request -> ServerResponse.ok().bodyValue("Hello, Spring WebFlux!"))
.build();
}
// WebClient Bean for making reactive HTTP calls
@Bean
public WebClient.Builder webClientBuilder() {
return WebClient.builder();
}
}
এখানে:
@EnableWebFlux: Spring WebFlux সক্রিয় করে।- RouterFunction: এটি WebFlux এর মধ্যে একটি রাউটারের সংজ্ঞা প্রদান করে, যেখানে HTTP GET রিকোয়েস্টের জন্য
/helloURL নির্ধারণ করা হয়েছে।
2. WebFlux Controller Example
এখানে একটি রিয়্যাকটিভ কন্ট্রোলার তৈরি করা হচ্ছে যা Mono এবং Flux (Project Reactor types) ব্যবহার করবে।
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@RestController
public class WebFluxController {
@GetMapping("/user")
public Mono<User> getUser() {
User user = new User(1, "John", "john.doe@example.com");
return Mono.just(user); // Mono will wrap the user object
}
}
User Class:
public class User {
private int id;
private String name;
private String email;
public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// Getters and setters...
}
এখানে:
- Mono: এটি একটি রিয়্যাকটিভ টাইপ যা একটি একক রেসপন্স (যেমন একটি ইউজার অবজেক্ট) ধারণ করে।
/userURL তে রিকোয়েস্ট হলেMono.just(user)রিটার্ন করা হবে, যা আসল ইউজারের ডেটা ফেরত দেয়।
3. WebFlux Reactive Client (WebClient)
Spring WebFlux এর WebClient হল একটি রিয়্যাকটিভ HTTP ক্লায়েন্ট, যা সার্ভার থেকে ডেটা অ্যাসিঙ্ক্রোনাসভাবে নেয়।
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
public class WebFluxClient {
private final WebClient webClient;
public WebFluxClient(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl("http://localhost:8080").build();
}
public Mono<User> getUser() {
return webClient.get()
.uri("/user")
.retrieve()
.bodyToMono(User.class); // Returns the user data asynchronously
}
}
এখানে:
- WebClient: এটি
GETরিকোয়েস্ট করে/userURL থেকে ইউজার ডেটা অ্যাসিঙ্ক্রোনাসভাবে নেয় এবংMono<User>রিটার্ন করে, যা পরবর্তীতে ব্যবহারকারীর ডেটা প্রদান করবে।
4. Running WebFlux Application
Spring Boot অ্যাপ্লিকেশন চালানোর জন্য @SpringBootApplication অ্যানোটেশন ব্যবহার করা হয়। এটা পুরো Spring Boot অ্যাপ্লিকেশনকে চালানোর জন্য প্রয়োজনীয় কনফিগারেশন প্রস্তুত করবে।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class WebFluxApplication {
public static void main(String[] args) {
SpringApplication.run(WebFluxApplication.class, args);
}
}
WebFlux এর উপকারিতা:
- Non-blocking and Asynchronous Processing:
WebFlux non-blocking I/O ব্যবহার করে, যার মানে হলো এটি একাধিক রিকোয়েস্টকে একসাথে প্রক্রিয়া করতে পারে, যা আপনার অ্যাপ্লিকেশনকে স্কেলযোগ্য এবং পারফর্ম্যান্ট করে। - Reactive Streams (Project Reactor):
WebFlux Project Reactor এর উপর ভিত্তি করে তৈরি যা asynchronous এবং event-driven অ্যাপ্লিকেশন তৈরি করতে সহায়ক। - Scalable and High-performance:
WebFlux ব্যবহারে সার্ভার কম রিসোর্স খরচে উচ্চ পরিমাণে রিকোয়েস্ট প্রক্রিয়া করতে সক্ষম। - Client-Side Integration:
WebFlux ক্লায়েন্ট সাইডের জন্য WebClient ব্যবহার করে অ্যাসিঙ্ক্রোনাস HTTP কল করতে সক্ষম।
উপসংহার:
Spring 5.x তে Spring WebFlux এর মাধ্যমে আপনি রিয়্যাকটিভ ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন যা asynchronous এবং non-blocking I/O ভিত্তিক। Spring WebFlux এবং Spring MVC একে অপরের পরিপূরক, যেখানে WebFlux রিয়্যাকটিভ অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য আদর্শ এবং Spring MVC ট্র্যাডিশনাল সার্ভলেট-ভিত্তিক ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য উপযুক্ত।