এই নিবন্ধে, আমি আপনাকে বলতে যাচ্ছি না কিভাবে আমার কোড ব্যবহার করে 5 মিনিটের মধ্যে একটি কার্যকরী স্প্রিং প্রকল্প চালু করা যায়। আমি শুধুমাত্র মৌলিক বিষয়গুলি লিখতে যাচ্ছি — যে জিনিসগুলি সম্পর্কে আপনি অজ্ঞ হতে পারেন এবং এখনও একটি প্রকল্প তৈরি করতে পারেন৷ কিন্তু এই নিবন্ধে, আপনি এখনও বুঝতে পারবেন না কি ঘটছে এবং, আরও গুরুত্বপূর্ণভাবে, কেন।
আপনি দেখতে পাচ্ছেন, বসন্ত মডুলার। এটি আমাদের শুধুমাত্র আমাদের অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় মডিউলগুলিকে সংযুক্ত করতে দেয় এবং সেগুলিকে সংযুক্ত করতে পারে না যা আমরা স্পষ্টতই ব্যবহার করব না। আমি যতদূর জানি, এই পদ্ধতিটিই স্প্রিংকে তার তৎকালীন প্রতিযোগীকে (EJB) ছাড়িয়ে যেতে দেয় এবং নেতৃত্ব দেয়। EJB ব্যবহার করে অ্যাপ্লিকেশনগুলি তাদের পিছনে অনেক নির্ভরতা টেনে এনেছে এবং ফলস্বরূপ, তারা অলস এবং ধীর হয়ে উঠেছে। চিত্রটি দেখায় যে স্প্রিং ফ্রেমওয়ার্কটি বেশ কয়েকটি মডিউল নিয়ে গঠিত:
স্প্রিং ফ্রেমওয়ার্ক কি?
স্প্রিং ফ্রেমওয়ার্ক, বা সহজভাবে স্প্রিং, জাভাতে ওয়েব অ্যাপ্লিকেশন তৈরির জন্য সবচেয়ে জনপ্রিয় ফ্রেমওয়ার্কগুলির মধ্যে একটি। একটি ফ্রেমওয়ার্ক একটি লাইব্রেরির মতো (সম্ভবত আপনি এই শব্দটির সাথে আরও পরিচিত), তবে বিবেচনা করার মতো কিছু আছে। মোটামুটিভাবে বলতে গেলে, আপনি যখন একটি লাইব্রেরি ব্যবহার করেন, আপনি কেবল এটিতে থাকা ক্লাসগুলির উদাহরণ তৈরি করেন, আপনার প্রয়োজনীয় পদ্ধতিগুলিকে কল করেন এবং এইভাবে আপনার প্রয়োজনীয় ফলাফল পান। অন্য কথায়, এটি আরও প্রয়োজনীয় পদ্ধতি: আপনার প্রোগ্রামে, আপনি স্পষ্টভাবে নির্দিষ্ট মুহূর্ত নির্দেশ করেন যখন আপনাকে কোন বস্তু তৈরি করতে হবে, কখন কোন নির্দিষ্ট পদ্ধতিতে কল করতে হবে ইত্যাদি। ফ্রেমওয়ার্কের সাথে জিনিসগুলি কিছুটা আলাদা। আপনি কেবল আপনার নিজের কিছু ক্লাস লিখুন এবং সেগুলিতে কিছু যুক্তি লিখুন, কিন্তু তারপর কাঠামো নিজেই আপনার ক্লাসগুলির উদাহরণ তৈরি করে এবং তাদের পদ্ধতিগুলিকে কল করে। আপনার ক্লাসগুলি সাধারণত ফ্রেমওয়ার্ক থেকে কিছু ইন্টারফেস প্রয়োগ করে বা এর কিছু ক্লাসের উত্তরাধিকারী হয়, এইভাবে আপনাকে কিছু কার্যকারিতা প্রদান করে যা ইতিমধ্যে আপনার জন্য লেখা হয়েছে। কিন্তু এটা সবসময় হয় না। উদাহরণস্বরূপ, স্প্রিং যতটা সম্ভব চেষ্টা করে এই ধরনের টাইট কাপলিং এড়াতে (যেখানে আপনার ক্লাসগুলি সরাসরি ফ্রেমওয়ার্কের ক্লাস/ইন্টারফেসের উপর নির্ভর করে)। এটি অর্জন করতে টীকা ব্যবহার করে। আমরা পরে এই ফিরে আসব. কিন্তু এটা বোঝা গুরুত্বপূর্ণ যে স্প্রিং হল শুধুমাত্র ক্লাস এবং ইন্টারফেসের একটি সংগ্রহ যা আপনার ব্যবহারের জন্য উপলব্ধ :) আমি এখুনি লক্ষ্য করতে চাই যে স্প্রিং শুধুমাত্র ওয়েব অ্যাপ্লিকেশনের জন্যই নয়, সবচেয়ে সাধারণ কনসোল প্রোগ্রামগুলির জন্যও ব্যবহার করা যেতে পারে। যা আমাদের সকলের কাছে পরিচিত। এবং আমরা আজ তাদের একটি লিখব. এইভাবে আপনাকে কিছু কার্যকারিতা প্রদান করে যা ইতিমধ্যে আপনার জন্য লেখা হয়েছে। কিন্তু এটা সবসময় হয় না। উদাহরণস্বরূপ, স্প্রিং যতটা সম্ভব চেষ্টা করে এই ধরনের টাইট কাপলিং এড়াতে (যেখানে আপনার ক্লাসগুলি সরাসরি ফ্রেমওয়ার্কের ক্লাস/ইন্টারফেসের উপর নির্ভর করে)। এটি অর্জন করতে টীকা ব্যবহার করে। আমরা পরে এই ফিরে আসব. কিন্তু এটা বোঝা গুরুত্বপূর্ণ যে স্প্রিং হল শুধুমাত্র ক্লাস এবং ইন্টারফেসের একটি সংগ্রহ যা আপনার ব্যবহারের জন্য উপলব্ধ :) আমি এখুনি লক্ষ্য করতে চাই যে স্প্রিং শুধুমাত্র ওয়েব অ্যাপ্লিকেশনের জন্যই নয়, সবচেয়ে সাধারণ কনসোল প্রোগ্রামগুলির জন্যও ব্যবহার করা যেতে পারে। যা আমাদের সকলের কাছে পরিচিত। এবং আমরা আজ তাদের একটি লিখব. এইভাবে আপনাকে কিছু কার্যকারিতা প্রদান করে যা ইতিমধ্যে আপনার জন্য লেখা হয়েছে। কিন্তু এটা সবসময় হয় না। উদাহরণস্বরূপ, স্প্রিং যতটা সম্ভব চেষ্টা করে এই ধরনের টাইট কাপলিং এড়াতে (যেখানে আপনার ক্লাসগুলি সরাসরি ফ্রেমওয়ার্কের ক্লাস/ইন্টারফেসের উপর নির্ভর করে)। এটি অর্জন করতে টীকা ব্যবহার করে। আমরা পরে এই ফিরে আসব. কিন্তু এটা বোঝা গুরুত্বপূর্ণ যে স্প্রিং হল শুধুমাত্র ক্লাস এবং ইন্টারফেসের একটি সংগ্রহ যা আপনার ব্যবহারের জন্য উপলব্ধ :) আমি এখুনি লক্ষ্য করতে চাই যে স্প্রিং শুধুমাত্র ওয়েব অ্যাপ্লিকেশনের জন্যই নয়, সবচেয়ে সাধারণ কনসোল প্রোগ্রামগুলির জন্যও ব্যবহার করা যেতে পারে। যা আমাদের সকলের কাছে পরিচিত। এবং আমরা আজ তাদের একটি লিখব. বসন্ত যতটা সম্ভব চেষ্টা করে এই ধরনের টাইট কাপলিং এড়াতে (যেখানে আপনার ক্লাসগুলি সরাসরি ফ্রেমওয়ার্কের ক্লাস/ইন্টারফেসের উপর নির্ভর করে)। এটি অর্জন করতে টীকা ব্যবহার করে। আমরা পরে এই ফিরে আসব. কিন্তু এটা বোঝা গুরুত্বপূর্ণ যে স্প্রিং হল শুধুমাত্র ক্লাস এবং ইন্টারফেসের একটি সংগ্রহ যা আপনার ব্যবহারের জন্য উপলব্ধ :) আমি এখুনি লক্ষ্য করতে চাই যে স্প্রিং শুধুমাত্র ওয়েব অ্যাপ্লিকেশনের জন্যই নয়, সবচেয়ে সাধারণ কনসোল প্রোগ্রামগুলির জন্যও ব্যবহার করা যেতে পারে। যা আমাদের সকলের কাছে পরিচিত। এবং আমরা আজ তাদের একটি লিখব. বসন্ত যতটা সম্ভব চেষ্টা করে এই ধরনের টাইট কাপলিং এড়াতে (যেখানে আপনার ক্লাসগুলি সরাসরি ফ্রেমওয়ার্কের ক্লাস/ইন্টারফেসের উপর নির্ভর করে)। এটি অর্জন করতে টীকা ব্যবহার করে। আমরা পরে এই ফিরে আসব. কিন্তু এটা বোঝা গুরুত্বপূর্ণ যে স্প্রিং হল শুধুমাত্র ক্লাস এবং ইন্টারফেসের একটি সংগ্রহ যা আপনার ব্যবহারের জন্য উপলব্ধ :) আমি এখুনি লক্ষ্য করতে চাই যে স্প্রিং শুধুমাত্র ওয়েব অ্যাপ্লিকেশনের জন্যই নয়, সবচেয়ে সাধারণ কনসোল প্রোগ্রামগুলির জন্যও ব্যবহার করা যেতে পারে। যা আমাদের সকলের কাছে পরিচিত। এবং আমরা আজ তাদের একটি লিখব. ) আমি এখনই নোট করতে চাই যে স্প্রিং শুধুমাত্র ওয়েব অ্যাপ্লিকেশনের জন্যই নয়, আমাদের সকলের কাছে পরিচিত সবচেয়ে সাধারণ কনসোল প্রোগ্রামগুলির জন্যও ব্যবহার করা যেতে পারে। এবং আমরা আজ তাদের একটি লিখব. ) আমি এখনই নোট করতে চাই যে স্প্রিং শুধুমাত্র ওয়েব অ্যাপ্লিকেশনের জন্যই নয়, আমাদের সকলের কাছে পরিচিত সবচেয়ে সাধারণ কনসোল প্রোগ্রামগুলির জন্যও ব্যবহার করা যেতে পারে। এবং আমরা আজ তাদের একটি লিখব.গঠন
কিন্তু বসন্ত শুধু একটি নির্দিষ্ট কাঠামো নয়। বরং, এটি একটি সাধারণ নাম যা বেশ কয়েকটি ছোট ফ্রেমওয়ার্ককে বোঝাতে ব্যবহৃত হয়, যার প্রতিটি তার নিজস্ব ধরণের কাজ করে।https://docs.spring.io/spring/docs/4.3.26.RELEASE/spring-framework-reference/htmlsingle/
চিত্র 2.1. স্প্রিং ফ্রেমওয়ার্কের ওভারভিউ
- তথ্য এক্সেস
- ওয়েব
- মূল
- এবং আরো
কেন জাভা স্প্রিং ফ্রেমওয়ার্ক আছে?
ঠিক আছে, এটি ফ্যাশনেবল, চটকদার এবং তাজা হওয়ার পাশাপাশি, আমি এখনই বলতে পারি যে আপনি স্প্রিং ব্যবহার করে অল্প পরিমাণে দক্ষতা অর্জন করার সাথে সাথেই আপনি বুঝতে পারবেন যে কীভাবে আপনার আর নেই এমন সমস্ত ধরণের কাজ রয়েছে। করতে, এবং কতটা কাজ বসন্ত নিজের উপর নেয়। আপনি কনফিগারেশন সেটিংসের কয়েক ডজন লাইন লিখতে পারেন এবং কয়েকটি ক্লাস লিখতে পারেন এবং আপনি একটি কার্যকরী প্রকল্পের সাথে শেষ করতে পারেন। কিন্তু যত তাড়াতাড়ি আপনি ভাবতে শুরু করেন যে হুডের নীচে কতগুলি জিনিস রয়েছে, কতটা কাজ করা হচ্ছে এবং আপনি যদি প্লেইন সার্লেট বা সকেট এবং খাঁটি জাভার উপর ভিত্তি করে একই প্রকল্প বাস্তবায়ন করতে যাচ্ছেন তবে আপনাকে কতটা কোড লিখতে হবে, আপনার চুল শেষ হয়ে দাঁড়াবে :) বসন্তকে এক ধরনের জাদু হিসেবেও বর্ণনা করা হয়েছে। আপনি এটি অনুভব করেন যখন আপনি দেখতে পান যে সবকিছু কাজ করে, কিন্তু পর্দার আড়ালে কীভাবে এবং কতটা কাজ হচ্ছে সে সম্পর্কে আপনার একটি মোটামুটি ধারণাও রয়েছে — তাই মনে হচ্ছে কার্যে সত্যিই এক ধরণের জাদু আছে :) এটি কীভাবে একে অপরের সাথে সংযুক্ত তা ব্যাখ্যা করার চেষ্টা করার চেয়ে এটিকে জাদু বলা সহজ। :) স্প্রিং অধ্যয়নের পক্ষে দ্বিতীয় যুক্তি হল যে জুনিয়র ডেভেলপারদের জন্য প্রায় 90% চাকরি খোলার জন্য (আমার ব্যক্তিগত পর্যবেক্ষণের উপর ভিত্তি করে) হয় জ্ঞান বা কমপক্ষে একটি সাধারণ ধারণা প্রয়োজনData
, Web MVC
, এবং Security
মডিউলগুলি অত্যাধুনিক ডেভেলপারদের অফার করে :) কিন্তু আজ শুধু মৌলিক বিষয়গুলি সম্পর্কে।
DI/IoC
আপনি যদি কখনও স্প্রিং সম্পর্কে পড়ার চেষ্টা করে থাকেন, তাহলে আপনি সম্ভবত এই সংক্ষিপ্ত শব্দগুলির মুখোমুখি হয়েছেন: DI/IoC। এখন আমি অত্যন্ত সুপারিশ করছি যে আপনি এই নিবন্ধটি থেকে বিরতি নিন এবং এই ডিজোন নিবন্ধটি পড়ুন ! IoC মানে নিয়ন্ত্রণের বিপরীত। আমি ইতিমধ্যেই এটি উল্লেখ করেছি যখন আমি লিখেছিলাম যে একটি লাইব্রেরি ব্যবহার করে আপনি নিজেই আপনার কোডে নির্দেশ করছেন যে কোন পদ্ধতিতে কোন বস্তুতে কল করতে হবে, কিন্তু একটি কাঠামো ব্যবহার করার মানে হল যে ফ্রেমওয়ার্কটি সঠিক সময়ে আপনার কোড কল করবে। অন্য কথায়, এই পরবর্তী ক্ষেত্রে, আপনি আর কোড/প্রোগ্রাম চালানোর প্রক্রিয়া পরিচালনা করছেন না — ফ্রেমওয়ার্ক আপনার জন্য এটি করে। আপনি কাঠামোতে নিয়ন্ত্রণ পাস করেছেন (নিয়ন্ত্রণের বিপরীত)। ডিআই মানে নির্ভরতা ইনজেকশন. নির্ভরতা ইনজেকশন দিয়ে, আপনি মূল পদ্ধতিতে বিড়াল বস্তু তৈরি করবেন না এবং তারপরে আপনার পদ্ধতিতে পাঠান। পরিবর্তে, স্প্রিং ফ্রেমওয়ার্ক আপনার জন্য সেগুলি তৈরি করে৷ আপনি কেবল "আমি এখানে একটি বিড়াল পেতে চাই" এর মতো কিছু বলুন এবং ফ্রেমওয়ার্কটি আপনার পদ্ধতিতে আপনার কাছে পৌঁছে যায়। আমরা ভবিষ্যতের নিবন্ধগুলিতে এই সংক্ষিপ্ত রূপটি দেখতে পাব।মটরশুটি এবং প্রসঙ্গ
বসন্তের মূল ধারণাগুলির মধ্যে একটি হল একটি শিম। আসলে, এটি কিছু শ্রেণীর একটি বস্তু মাত্র। ধরুন আমাদের একটি প্রোগ্রাম আছে যার জন্য 3টি বস্তুর প্রয়োজন: একটি বিড়াল, একটি কুকুর এবং একটি তোতাপাখি৷ এবং আমরা পদ্ধতি একটি গুচ্ছ সঙ্গে ক্লাস একটি গুচ্ছ আছে. কখনও কখনও আমাদের একটি পদ্ধতির জন্য একটি বিড়াল প্রয়োজন, কখনও কখনও আমাদের একটি ভিন্ন পদ্ধতির জন্য একটি কুকুর প্রয়োজন, এবং কখনও কখনও আমাদের পদ্ধতিতে একটি বিড়াল এবং একটি তোতা উভয়ের প্রয়োজন হয় (উদাহরণস্বরূপ, বিড়ালকে খাওয়ানোর পদ্ধতি, হা-হা)। এখনও অন্যান্য পদ্ধতির জন্য, তিনটি বস্তুই প্রয়োজন। হ্যাঁ, আমরা প্রথমে মূল পদ্ধতিতে এই তিনটি অবজেক্ট তৈরি করতে পারি, এবং তারপর সেগুলিকে আমাদের ক্লাসে পাস করতে পারি, এবং তারপর এই ক্লাসগুলির মধ্যে সেগুলিকে প্রাসঙ্গিক পদ্ধতিতে পাস করতে পারি... এবং পুরো প্রোগ্রাম জুড়ে তাই। কিন্তু যদি আমরা মনে করি যে আমরা মাঝে মাঝে আমাদের পদ্ধতিগুলির জন্য ইনপুট পরামিতিগুলির তালিকা পরিবর্তন করতে চাই (উদাহরণস্বরূপ, আমরা কিছু পুনর্লিখন বা নতুন কার্যকারিতা যোগ করার সিদ্ধান্ত নিই), তারপর আমাদের কোডে বেশ কয়েকটি পরিবর্তন করতে হবে। এবং এখন কল্পনা করুন যে আমাদের কাছে 3টি নয়, 300টি এমন বস্তু রয়েছে। একটি বিকল্প হ'ল আমাদের সমস্ত অবজেক্ট এক তালিকায় সংগ্রহ করা (List<Object>
), এটি প্রতিটি পদ্ধতিতে পাস করুন এবং তারপর পদ্ধতিগুলির ভিতরে থাকাকালীন প্রয়োজনীয় বস্তুটি পান। কিন্তু প্রোগ্রাম রান হিসাবে, যদি কিছু বস্তু এই তালিকায় যোগ করা হয়, বা খারাপ, একটি মুছে ফেলা হলে কি হবে? তালিকা থেকে বস্তু পেতে যেখানে আমরা একটি সূচক ব্যবহার করি সেখানে প্রতিটি পদ্ধতি ভাঙার সম্ভাবনা রয়েছে। এই সমস্যা এড়ানোর জন্য, আমরা আমাদের বস্তুগুলিকে একটি তালিকায় নয়, একটি মানচিত্রে সংরক্ষণ করার সিদ্ধান্ত নিই, যেখানে কীটি বস্তুর নাম এবং মানটি নিজেই বস্তু। এটি আমাদের প্রয়োজনীয় বস্তুগুলিকে তাদের নাম ব্যবহার করে পুনরুদ্ধার করতে দেয়, যেমন get("parrot"), এবং প্রতিক্রিয়া হিসাবে আমরা তোতা বস্তুটি পাই। অথবা কী বস্তুর শ্রেণী হতে পারে, এবং মান নিজেই বস্তু হতে পারে. এই ক্ষেত্রে, বস্তুর নাম উল্লেখ না করে, আমাদের প্রয়োজনীয় বস্তুর শ্রেণী নির্দিষ্ট করতে পারে। এটাও সুবিধাজনক। অথবা আমরা মানচিত্রের জন্য কিছু ধরণের মোড়কও লিখতে পারি, যেখানে কিছু পদ্ধতি তাদের নামের দ্বারা বস্তু পায়, এবং অন্যান্য পদ্ধতিগুলি তাদের শ্রেণীর দ্বারা বস্তু পায়। আমরা এখানে যা পৌঁছেছি তাকে বলা হয়স্প্রিং ফ্রেমওয়ার্কে প্রয়োগের প্রসঙ্গ । একটি প্রসঙ্গ মটরশুটি (বস্তু) একটি সংগ্রহ। আমরা একটি প্রেক্ষাপট অ্যাক্সেস করি যার জন্য আমাদের প্রয়োজন শিম (বস্তু) এর নাম, এর ধরন বা অন্য কোনো উপায়ে। অতিরিক্তভাবে, আমরা স্প্রিংকে নিজের প্রেক্ষাপটে আমাদের প্রয়োজনীয় মটরশুটি দেখতে এবং এটিকে আমাদের পদ্ধতিতে প্রেরণ করতে বলতে পারি। উদাহরণস্বরূপ, ধরুন আমাদের এইরকম একটি পদ্ধতি ছিল:
public void doSomething(Cat cat) {
...
}
যখন স্প্রিং এই পদ্ধতিটি বলে, তখন এটি আমাদের বিড়াল বস্তুটিকে তার প্রসঙ্গ থেকে নিয়েছিল এবং এটিকে পদ্ধতিতে প্রেরণ করেছিল। কিন্তু এখন আমরা সিদ্ধান্ত নিয়েছি যে, একটি বিড়াল ছাড়াও, আমাদের পদ্ধতিতে একটি তোতাপাখিরও প্রয়োজন। বসন্তের সাথে, কিছুই সহজ হতে পারে না! আমরা সহজভাবে লিখি:
public void doSomething(Cat cat, Parrot parrot) {
...
}
এখন যখন স্প্রিং আমাদের পদ্ধতিকে কল করে, তখন এটি একটি বিড়াল এবং একটি তোতাপাখি পাস করার প্রয়োজনীয়তা বোঝে, তাই এটি তার প্রসঙ্গে যায়, এই দুটি বস্তু পান এবং সেগুলিকে আমাদের পদ্ধতিতে প্রেরণ করে৷ স্প্রিং-এ নিয়ন্ত্রণের লাগাম স্থানান্তর করার মাধ্যমে, আমরা বস্তু তৈরি করার দায়িত্বও হস্তান্তর করি এবং সেগুলিকে আমাদের পদ্ধতিতে প্রেরণ করি, যাকে বসন্ত বলবে। এটি প্রশ্ন তোলে: বসন্ত কীভাবে জানে যে কোন বস্তু (মটরশুটি) তৈরি করতে হবে?
একটি অ্যাপ্লিকেশন কনফিগার করার উপায়
একটি অ্যাপ্লিকেশান কনফিগার করার তিনটি প্রধান উপায় রয়েছে , অর্থাৎ, স্প্রিংকে ঠিক কোন বস্তুগুলি আমাদের প্রয়োজন তা বলার উপায়:- XML কনফিগারেশন ফাইল
- জাভা ভিত্তিক কনফিগারেশন
- স্বয়ংক্রিয় কনফিগারেশন
- সর্বোচ্চ অগ্রাধিকার সহ পদ্ধতি, যা পছন্দ করা উচিত, স্বয়ংক্রিয় কনফিগারেশন
- যদি স্বয়ংক্রিয় কনফিগারেশন সঠিকভাবে সমস্ত সম্ভাব্য মটরশুটি কনফিগার করতে ব্যবহার করা না যায়, তাহলে জাভা-ভিত্তিক কনফিগারেশন ব্যবহার করুন (যা জাভা কোড ব্যবহার করে বস্তু তৈরি করে)
- এবং সর্বনিম্ন-অগ্রাধিকার পদ্ধতি হল পুরানো-সেকেলে উপায় — XML কনফিগারেশন ফাইল ব্যবহার করে।
GO TO FULL VERSION