স্প্রিং কাঠামো

স্প্রিং কাঠামো বা স্প্রিং ফ্রেমওয়ার্কটি একটি অ্যাপ্লিকেশন ফ্রেমওয়ার্ক এবং জাভা প্ল্যাটফর্মের জন্য কন্ট্রোল কন্টেইনারের বিপরীতধর্মী । এর মূল বৈশিষ্ট্যগুলি কোনও জাভা অ্যাপ্লিকেশন দ্বারা ব্যবহার করা যেতে পারে, তবে জাভা EE (এন্টারপ্রাইজ সংস্করণ) প্ল্যাটফর্মের উপরে ওয়েব অ্যাপ্লিকেশনগুলি নির্মাণের জন্য এক্সটেনশন রয়েছে। যদিও ফ্রেমওয়ার্ক কোনও নির্দিষ্ট প্রোগ্রামিং মডেল প্রয়োগ করে না তবে এটি জাভা সম্প্রদায়ে এন্টারপ্রাইজ জাভাবিণ (ইজেবি) মডেলের জন্য অতিরিক্ত বা এমনকি প্রতিস্থাপন হিসাবে জনপ্রিয় হয়ে উঠেছে। এটি ওপেন সোর্সও বটে ।
দু ধরনের কনফিগারেশন রয়েছে এতে, এক, xml নির্ভর ও দুই, টিকা নির্ভর । 
দু ধরনের নকশা প্রকার রয়েছে এতে, এক, কন্ট্রোল ধারক এর বিচ্ছিন্নতা (নির্ভরতা ইনজেকশন) ও দুই, দৃষ্টিভঙ্গি ভিত্তিক প্রোগ্রামিং কাঠামো। 
নির্ভরতা ইনজেকশন (DI) একটি নকশা প্যাটার্ন যা প্রোগ্রামিং কোড থেকে নির্ভরতা সরিয়ে দেয় যাতে এটি পরিচালনা করা এবং অ্যাপ্লিকেশনটি পরীক্ষা করা সহজ হয় । নির্ভরতা ইনজেকশন আমাদের প্রোগ্রামিং কোড loosely মিলিত করে তোলে।
স্প্রিং কাঠামোতে নির্ভরতা ইনজেকশন দুটি উপায় উপলব্ধ করা হয়
এর অন্তর্গত হচ্ছে দৃষ্টিভঙ্গি, পরামর্শ, পয়েন্টকাট, যোগফল, 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
এটি কনভেনশন ওভার কনফিগারেশন নামেও পরিচিত। রুবি অন রেইলস ওয়েব ফ্রেমওয়ার্কের দর্শনের বর্ণনা দেওয়ার জন্য ড্যানিশ পোগ্রামার ডেভিড হাইনমিয়ার হানসন এই ধারণাকে উপস্থাপন করেছিলেন।
উদাহরণস্বরূপ, মডেল এ একটি ক্লাস "সেলস" থাকলে, ডাটাবেসের সংশ্লিষ্ট টেবিলের ডিফল্ট নাম "সেলস" হয়। এই কনভেনশন থেকে বিচ্যুত হলেই কেবল এই নামগুলি সম্পর্কে কোড লিখতে হবে।
স্প্রিংএর এই সুবিধাটির নাম স্প্রিং বুট। স্প্রিং বুট ফ্রেমওয়ার্ক টি স্প্রিং টিম দ্বারা গোড়া থেকে তৈরি করা হয়নি। মূলত বিদ্যমান স্প্রিং ফ্রেমওয়ার্কের ওপর এটি তৈরী হয়েছে। বিদ্যমান স্প্রিং কাঠামোর প্রকল্পগুলো সরাসরি স্প্রিং বুট এপ্লিকেশন এ রূপান্তর কিছুটা দুঃসাধ্য। তবে নতুন প্রকল্প তৈরীতে (গ্রিনফিল্ড প্রজেক্ট) এটি খুব কার্যকরী। 
বৈশিষ্ট্য:
স্প্রিং টিম (দ্য পাইভোটাল টিম) নিম্নলিখিত তিনটি পন্থা সরবরাহ করেছে এপ্লিকেশন তৈরির ক্ষেত্রে ।
স্প্রিং বুট ব্যবহার করে তিন রকম স্প্রিং-ভিত্তিক অ্যাপ্লিকেশন বিকাশ করা যায় :
বিভিন্ন পন্থা ও তাতে তৈরী করা এপ্লিকেশনগুলোর সম্পর্ক নিম্নরূপ :
স্প্রিং বুট ফ্রেমওয়ার্ক প্রোগ্রামিং মডেল গ্রোভি প্রোগ্রামিং মডেল দ্বারা অনুপ্রাণিত। স্প্রিং বুট অভ্যন্তরীণভাবে ডিফল্ট ইম্পোর্ট এবং কনফিগারেশন সরবরাহ করতে কিছু গ্রোভি ভিত্তিক কৌশল এবং সরঞ্জাম ব্যবহার করে।স্প্রিং বুট ফ্রেমওয়ার্কটিও তার এনোটেশনগুলিতে বিদ্যমান স্প্রিং ফ্রেমওয়ার্ক এনোটেশনগুলিকে সংযুক্ত করে। স্প্রিং বুট ফ্রেমওয়ার্কটি স্পষ্টভাবে নতুন প্রোগ্রামিং মডেলের মাধ্যমে স্প্রিং-জাভা ভিত্তিক অ্যাপ্লিকেশন প্রোগ্রামিং মডেলে পরিবর্তন আনে ।
@SpringBootApplication এই টীকায় কিছু ডিফল্ট টিকা উপলব্ধ থাকে, যেমন : @SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan । এই টীকাটি ব্যবহার করে কীভাবে একটি স্প্রিং বুট অ্যাপ্লিকেশন লেখা যায় তার উদাহরণ :
অন্যান্য গুরুত্বপূর্ণ টিকা হলো : @Component, @Service, @Repository . ইউনিট টেস্টিং বা ইন্টিগ্রেশন পরীক্ষার সময় অ্যাপ্লিকেশন পরীক্ষায় বুট নির্দিষ্ট বৈশিষ্ট্যগুলি সক্ষম করতে স্প্রিং বুট সরবরাহ করে @SpringBootTest টিকা।
যদি কোনো স্প্রিং বুট এপ্লিকেশনকে কোনো বিদ্যমান টমক্যাট-এ বা অন্য কোনো এন্টারপ্রাইস জাভা সার্ভার (যেমন : ওয়েবস্পেয়ার, ওয়েবলজিক, জে বস ইত্যাদি ) এ স্থাপন করতে হয় তবে তিনটি স্বজ্ঞাত পরিবর্তন করতে হবে:
 @Configuration