**স্প্রিং কাঠামো** বা **স্প্রিং ফ্রেমওয়ার্ক**টি একটি অ্যাপ্লিকেশন ফ্রেমওয়ার্ক এবং জাভা প্ল্যাটফর্মের জন্য কন্ট্রোল কন্টেইনারের বিপরীতধর্মী । এর মূল বৈশিষ্ট্যগুলি কোনও জাভা অ্যাপ্লিকেশন দ্বারা ব্যবহার করা যেতে পারে, তবে জাভা EE (এন্টারপ্রাইজ সংস্করণ) প্ল্যাটফর্মের উপরে ওয়েব অ্যাপ্লিকেশনগুলি নির্মাণের জন্য এক্সটেনশন রয়েছে। যদিও ফ্রেমওয়ার্ক কোনও নির্দিষ্ট প্রোগ্রামিং মডেল প্রয়োগ করে না তবে এটি জাভা সম্প্রদায়ে এন্টারপ্রাইজ জাভাবিণ (ইজেবি) মডেলের জন্য অতিরিক্ত বা এমনকি প্রতিস্থাপন হিসাবে জনপ্রিয় হয়ে উঠেছে। এটি ওপেন সোর্সও বটে ।

মডিউল
-----

দু ধরনের কনফিগারেশন রয়েছে এতে , এক , xml নির্ভর ও দুই , টিকা নির্ভর । 

### নকশার মূলনীতি

দু ধরনের নকশা প্রকার রয়েছে এতে , এক , কন্ট্রোল ধারক এর বিচ্ছিন্নতা (নির্ভরতা ইনজেকশন) ও দুই , দৃষ্টিভঙ্গি ভিত্তিক প্রোগ্রামিং কাঠামো। 

#### কন্ট্রোল ধারক এর বিচ্ছিন্নতা (নির্ভরতা ইনজেকশন)

নির্ভরতা ইনজেকশন (DI) একটি নকশা প্যাটার্ন যা প্রোগ্রামিং কোড থেকে নির্ভরতা সরিয়ে দেয় যাতে এটি পরিচালনা করা এবং অ্যাপ্লিকেশনটি পরীক্ষা করা সহজ হয় । নির্ভরতা ইনজেকশন আমাদের প্রোগ্রামিং কোড loosely মিলিত করে তোলে।

স্প্রিং কাঠামোতে নির্ভরতা ইনজেকশন দুটি উপায় উপলব্ধ করা হয়

1. নির্মাতা দ্বারা
2. সেট্টার পদ্ধতি দ্বারা

#### দৃষ্টিভঙ্গি ভিত্তিক প্রোগ্রামিং কাঠামো

এর অন্তর্গত হচ্ছে দৃষ্টিভঙ্গি, পরামর্শ, পয়েন্টকাট, যোগফল, AOP প্রক্সি এবং বয়ন।

### তথ্য অ্যাক্সেস ফ্রেমওয়ার্ক

স্প্রিং এর ডেটা অ্যাক্সেস কাঠামো অ্যাপ্লিকেশনগুলিতে ডেটাবেসগুলির সাথে কাজ করার সময় ডেভেলপারদের সম্মুখীন সাধারণ সমস্যার সমাধান করে।জাভাতে সমস্ত জনপ্রিয় ডেটা অ্যাক্সেস কাঠামোর জন্য সমর্থন প্রদান করা হয়: JDBC, iBatis/MyBatis, হাইবারনেট, জাভা ডেটা অবজেক্টস (JDO, 5.x থেকে বন্ধ), জাকার্তা নির্বন্ধ বা জাভা নির্বন্ধ API (JPA), ওরাকল টপলিংক, Apache OJB, এবং Apache Cayenne, অন্যদের মধ্যে । স্প্রিং ডেটা জেপিএ স্প্রিং ডেটার একটি অংশ এবং এটি হাইবারনেট 5, অ্যাপাচি উন্মুক্তJPA 2.4 এবং এক্লিপ্সলিংক 2.6.1 সমর্থন করে। স্প্রিং ডেটা সংগ্রহস্থল ডেটা অ্যাক্সেস স্তরগুলি বাস্তবায়নের জন্য প্রয়োজনীয় বয়লারপ্লেট কোডের পরিমাণ উল্লেখযোগ্যভাবে হ্রাস করে।

### লেনদেন ব্যবস্থাপনা

### মডেল-ভিউ-নিয়ামক ফ্রেমওয়ার্ক

জুয়ার্গেন হোয়েলারের স্প্রিং এমভিসি/ওয়েব রিঅ্যাক্টিভ উপস্থাপনা
স্প্রিং কাঠামো ব্যবহার করে প্রতিনিধিত্বমূলক অবস্থা স্থানান্তর ধরনের ওয়েব সার্ভিস সহজেই তৈরী করা যায়। Restful ওয়েব সার্ভিস স্প্রিং কাঠামোর MVC স্থাপত্যের অংশ। এছাড়া গ্রাহক সিস্টেম তৈরিতে স্প্রিং কাঠামোর রেস্ট-কাঠামো ব্যবহার করা যায়।

Spring Rest Service Example from Spring Website

Spring Rest Service Example from Dzone Website

### রিমোট অ্যাক্সেস ফ্রেমওয়ার্ক

### কনভেনশন দ্বারা কোডিং

এটি কনভেনশন ওভার কনফিগারেশন নামেও পরিচিত। রুবি অন রেইলস ওয়েব ফ্রেমওয়ার্কের দর্শনের বর্ণনা দেওয়ার জন্য ড্যানিশ পোগ্রামার **ডেভিড হাইনমিয়ার হানসন** এই ধারণাকে উপস্থাপন করেছিলেন।

উদাহরণস্বরূপ, মডেল এ একটি ক্লাস *সেলস* থাকলে, ডাটাবেসের সংশ্লিষ্ট টেবিলের ডিফল্ট নাম "সেলস" হয়। এই কনভেনশন থেকে বিচ্যুত হলেই কেবল এই নামগুলি সম্পর্কে কোড লিখতে হবে।

#### স্প্রিং বুট

স্প্রিংএর এই সুবিধাটির নাম **স্প্রিং বুট**। স্প্রিং বুট ফ্রেমওয়ার্ক টি স্প্রিং টিম দ্বারা গোড়া থেকে তৈরি করা হয়নি। মূলত বিদ্যমান স্প্রিং ফ্রেমওয়ার্কের ওপর এটি তৈরী হয়েছে। বিদ্যমান স্প্রিং কাঠামোর প্রকল্পগুলো সরাসরি স্প্রিং বুট এপ্লিকেশন এ রূপান্তর কিছুটা দুঃসাধ্য। তবে নতুন প্রকল্প তৈরীতে (গ্রিনফিল্ড প্রজেক্ট) এটি খুব কার্যকরী। 

বৈশিষ্ট্য:

1. স্বনির্ভর অ্যাপ্লিকেশন তৈরি করা
2. সরাসরি টম্যাট বা জেটি এম্বেড করা (ওয়ার ফাইলগুলি স্থাপন করার দরকার নেই)
3. মাভেন কনফিগারেশন সরল করতে এটি মতামতযুক্ত 'স্টার্টার' **প্রজেক্ট অবজেক্ট মডেল** (POM) সরবরাহ করে । সমস্ত স্প্রিং বুট প্রকল্পগুলি পম.এক্সএমএল ফাইলে প্রগারম্ভ হিসাবে **spring-boot-starter-parent** ব্যবহার করে । ২০১৪র এপ্রিলে প্রথম প্রকাশিত হয়। দ্বিতীয় সংস্করণ প্রকাশিত হয় ২০১৮র মার্চে। সাম্প্রতিক সংস্করণ হচ্ছে ২.৩। অভিভাবক সংস্করণ সংখ্যার মাধ্যমে নির্ভরশীল জার-গুলোর সংস্করণ বিবেচিত হয়। spring-boot-starter-data-jpa (ORM অপারেশনের জন্য), spring-boot-starter-actuator (নিরীক্ষণ এবং পরিচালনা করতে [অটোকনফিগ, ম্যাপিংস, তথ্য, স্বাস্থ্য, মেট্রিক্স]), spring-boot-starter-security (স্প্রিং সিকিউরিটির জন্য), spring-boot-starter-web (REST শেষ পয়েন্ট লিখতে) , spring-boot-starter-thymeleaf (ওয়েব অ্যাপ্লিকেশন তৈরি করতে) , spring-boot-starter-test (টেস্ট কেস লেখার জন্য) ।
4. স্বয়ংক্রিয়ভাবে স্প্রিং কনফিগার করা
5. একেবারে কোন কোড লেখার এবং এক্সএমএল কনফিগারেশন প্রয়োজন নেই । স্প্রিং-এর মডেল-ভিউ-নিয়ামক ফ্রেমওয়ার্ক-এর **প্রেরণকারী সার্ভলেট**, **ডেটা উৎস**, **লেনদেন পরিচালক** -এর এখানে অটো-কনফিগার হয়।

স্প্রিং টিম (দ্য পাইভোটাল টিম) নিম্নলিখিত তিনটি পন্থা সরবরাহ করেছে এপ্লিকেশন তৈরির ক্ষেত্রে ।

1. স্প্রিং বুট CLI টুল ব্যবহার করে
2. স্প্রিং এসটিএস আইডিই ব্যবহার করে
3. স্প্রিং Initializr ওয়েবসাইট ব্যবহার করে ()

স্প্রিং বুট ব্যবহার করে তিন রকম স্প্রিং-ভিত্তিক অ্যাপ্লিকেশন বিকাশ করা যায় :

1. জাভা ভিত্তিক অ্যাপ্লিকেশন
2. গ্রোভি অ্যাপ্লিকেশন
3. কোটলিন অ্যাপ্লিকেশন

বিভিন্ন পন্থা ও তাতে তৈরী করা এপ্লিকেশনগুলোর সম্পর্ক নিম্নরূপ :

| পন্থা | জাভা ভিত্তিক অ্যাপ্লিকেশন | গ্রোভি অ্যাপ্লিকেশন | কোটলিন অ্যাপ্লিকেশন |
| --- | --- | --- | --- |
| স্প্রিং বুট CLI | না | হ্যাঁ | না |
| স্প্রিং এসটিএস আইডিই | হ্যাঁ | হ্যাঁ | না |
| স্প্রিং Initializr | হ্যাঁ | হ্যাঁ | হ্যাঁ |
|

স্প্রিং বুট ফ্রেমওয়ার্ক প্রোগ্রামিং মডেল গ্রোভি প্রোগ্রামিং মডেল দ্বারা অনুপ্রাণিত। স্প্রিং বুট অভ্যন্তরীণভাবে ডিফল্ট ইম্পোর্ট এবং কনফিগারেশন সরবরাহ করতে কিছু গ্রোভি ভিত্তিক কৌশল এবং সরঞ্জাম ব্যবহার করে।স্প্রিং বুট ফ্রেমওয়ার্কটিও তার এনোটেশনগুলিতে বিদ্যমান স্প্রিং ফ্রেমওয়ার্ক এনোটেশনগুলিকে সংযুক্ত করে। স্প্রিং বুট ফ্রেমওয়ার্কটি স্পষ্টভাবে নতুন প্রোগ্রামিং মডেলের মাধ্যমে স্প্রিং-জাভা ভিত্তিক অ্যাপ্লিকেশন প্রোগ্রামিং মডেলে পরিবর্তন আনে ।

**@SpringBootApplication** এই টীকায় কিছু ডিফল্ট টিকা উপলব্ধ থাকে , যেমন : @SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan । এই টীকাটি ব্যবহার করে কীভাবে একটি স্প্রিং বুট অ্যাপ্লিকেশন লেখা যায় তার উদাহরণ :

```
 @SpringBootApplication
 public class Hello implements CommandLineRunner {
 private static final Logger log = LoggerFactory.getLogger(Hello.class);
 public static void main(String args[]) {
 SpringApplication.run(Hello.class);
 }
 @Override
 public void run(String...args) throws Exception {
 RestTemplate restTemplate = new RestTemplate();
 Country country = restTemplate.getForObject("http://www.services.groupkt.com/country/get/iso2code/US", Country.class);
 log.info(country.toString());
 }
 }

```

অন্যান্য গুরুত্বপূর্ণ টিকা হলো : @Component, @Service, @Repository. ইউনিট টেস্টিং বা ইন্টিগ্রেশন পরীক্ষার সময় অ্যাপ্লিকেশন পরীক্ষায় বুট নির্দিষ্ট বৈশিষ্ট্যগুলি সক্ষম করতে স্প্রিং বুট সরবরাহ করে **@SpringBootTest** টিকা।

যদি কোনো স্প্রিং বুট এপ্লিকেশনকে কোনো বিদ্যমান টমক্যাট-এ বা অন্য কোনো এন্টারপ্রাইস জাভা সার্ভার (যেমন : ওয়েবস্পেয়ার , ওয়েবলজিক , জে বস ইত্যাদি ) এ স্থাপন করতে হয় তবে তিনটি স্বজ্ঞাত পরিবর্তন করতে হবে:

* জার বিল্ড থেকে মাভেনের ওয়ার বিল্ডে চলে যান
* আপনার pom.xML ফাইলে স্প্রিং-বুট-মাভেন-প্লাগইন এর ঘোষণা গোপন করুন
* অ্যাপ্লিকেশনটিতে একটি ওয়েব এন্ট্রি পয়েন্ট যুক্ত করুন। এভাবে পরিবর্তন করুন:

```
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer {
   public static void main(String[] args) {
       SpringApplication.run(applicationClass, args);
   }
   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
       return application.sources(applicationClass);
   }
   private static Class<Application> applicationClass = Application.class;
}
@RestController
class GreetingController {
   @RequestMapping("/hello/{name}")
   String hello(@PathVariable String name) {
       return "Hello, "+ name + "!";
   }
}
```

#### স্প্রিং রোও

### ব্যাচ ফ্রেমওয়ার্ক

তথ্যসূত্র
---------

1. ↑  *Spring Framework 5.1 goes GA*
2. ↑  "Spring Core Design"।
3. ↑  "Spring Boot"।
4. ↑  "Spring Boot Starters"।