স্প্রিং ফ্রেমওয়ার্ক ঠিক কী জন্য? [বন্ধ]


623

আমি বসন্ত সম্পর্কে প্রচুর শুনি , লোকেরা পুরো ওয়েব জুড়েই বলেছে যে ওয়েব বিকাশের জন্য স্প্রিং একটি ভাল কাঠামো। স্প্রিং ফ্রেমওয়ার্ক ঠিক কী জন্য?


10
আমি বুঝতে পেরেছি যে প্রশ্নটি খুব বিস্তৃত, তবে আমি মনে করি যে এই খুব নির্দিষ্ট ক্ষেত্রে প্রশ্নটি জুনিয়নের বিকাশকারীদের পক্ষে খুব গুরুত্বপূর্ণ যারা প্রায়শই স্প্রিং সম্পর্কে এমন লোকদের দ্বারা কথা বলে থাকেন যে এটি ধরে নেওয়ার পক্ষে এমন কি বলার প্রয়োজন নেই যে এটিও যথেষ্ট জনপ্রিয়? এটা করে. সর্বোপরি, আপনি যদি ইনস্টাগ্রাম সম্পর্কে এবং এর উদ্দেশ্য কী তা কখনও শুনেন না তবে আপনার হাত বাড়িয়ে দিন .... (স্বীকারোক্তি: আমি কখনই ইন্সটা ব্যবহার করি নি)
usr-local-

2
10 বছর আগে প্রশ্ন জিজ্ঞাসা করা হয়েছিল, এবং সেই সময়ে স্প্রিং বুট, স্প্রিং ডেটা, স্প্রিং বিশ্রাম ইত্যাদির মতো তার সমস্ত সাব-প্রজেক্টের সাথে স্প্রিং এখনকার চেয়ে কিছুটা ছোট ছিল এবং প্রকৃত কারণেই এটি এক বছর আগে কাছাকাছি ছিল, কারণ এই প্রশ্নের বিস্তৃতি। আমি যখন এই প্রশ্নটি জিজ্ঞাসা করেছি তখন আমি কেবল ডিআই বুঝতে চাইছিলাম এবং এটি কেন প্রয়োজন।
মাকসিম

উত্তর:


713

মূলত বসন্ত একটি ফ্রেমওয়ার্ক এটি এমন একটি প্যাটার্ন যা খুব decoupled সিস্টেম তৈরি করতে দেয়।

সমস্যাটি

উদাহরণস্বরূপ, ধরুন আপনাকে সিস্টেমের ব্যবহারকারীদের তালিকা তৈরি করতে হবে এবং এইভাবে একটি ইন্টারফেস বলে UserLister:

public interface UserLister {
    List<User> getUsers();
}

এবং সম্ভবত একটি ব্যবহারকারীর সমস্ত ব্যবহারকারীদের পেতে একটি ডাটাবেস অ্যাক্সেস অ্যাক্সেস:

public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

আপনার দৃষ্টিতে আপনাকে একটি অ্যাক্সেস অ্যাক্সেস করতে হবে (কেবল উদাহরণ, মনে রাখবেন):

public class SomeView {
    private UserLister userLister;

    public void render() {
        List<User> users = userLister.getUsers();
        view.render(users);
    }
}

নোট করুন যে উপরের কোডটি ভেরিয়েবলটি আরম্ভ করে নি userLister। আমাদের কি করা উচিৎ? যদি আমি স্পষ্টভাবে এটির মতো অবজেক্টটি ইনস্ট্যান্ট করি:

UserLister userLister = new UserListerDB();

... আমি আমার ক্লাসটি ডিবিতে অ্যাক্সেসের সাথে বাস্তবায়নের সাথে দর্শনটি দম্পতি করব। আমি যদি ডিবি বাস্তবায়ন থেকে অন্য কোনওটিতে যেতে চাই যা কমা-বিচ্ছিন্ন ফাইল থেকে ব্যবহারকারী তালিকা পেয়ে থাকে (মনে রাখবেন, এটি একটি উদাহরণ)? সেক্ষেত্রে আমি আবার আমার কোডে যাব এবং উপরের লাইনটি এতে পরিবর্তন করব:

UserLister userLister = new UserListerCommaSeparatedFile();

এটি এর মতো একটি ছোট প্রোগ্রামের সাথে কোনও সমস্যা নেই তবে ... শত শত দর্শন এবং সমান সংখ্যক ব্যবসায়িক ক্লাস রয়েছে এমন একটি প্রোগ্রামে কী ঘটে? রক্ষণাবেক্ষণ দুঃস্বপ্ন হয়ে যায়!

বসন্ত (নির্ভরতা ইনজেকশন) পদ্ধতির

স্প্রিং যা করে তা হল এক্সএমএল ফাইল বা টীকাগুলি ব্যবহার করে ক্লাসগুলি তারের করা, এইভাবে সমস্ত বস্তু বসন্তের দ্বারা ইনস্ট্যান্টিয়েটেড এবং আরম্ভ করা হয় এবং সঠিক জায়গায় ইঞ্জেকশন করা হয় (সার্লেলেটস, ওয়েব ফ্রেমওয়ার্কস, বিজনেস ক্লাস, ডিএও, ইত্যাদি ইত্যাদি) ...)।

বসন্তের উদাহরণে ফিরে যেতে আমাদের কেবল userListerমাঠের জন্য একটি সেটার থাকা দরকার এবং এটির মতো একটি এক্সএমএল ফাইল থাকা উচিত:

<bean id="userLister" class="UserListerDB" />

<bean class="SomeView">
    <property name="userLister" ref="userLister" />
</bean>

বা আরও সহজেই আমাদের দর্শন শ্রেণিতে দায়ের করা ফাইলগুলি এটিকে টিকিয়ে দিন @Inject:

@Inject
private UserLister userLister;

এভাবে যখন দৃশ্যটি তৈরি করা হবে তখন এটি যাদুতেUserLister কাজ করার জন্য প্রস্তুত থাকবে ।

List<User> users = userLister.getUsers();  // This will actually work
                                           // without adding any line of code

বেশ ভালো! তাই না?

  • আপনি যদি নিজের UserListerইন্টারফেসের আরেকটি প্রয়োগ ব্যবহার করতে চান ? শুধু এক্সএমএল পরিবর্তন করুন।
  • UserListerবাস্তবায়ন প্রস্তুত না থাকলে কী হবে ? একটি অস্থায়ী মক বাস্তবায়ন প্রোগ্রাম UserListerএবং ভিউ এর বিকাশ সহজ।
  • আমি যদি আর বসন্ত ব্যবহার করতে না চাই তবে কী হবে? শুধু এটি ব্যবহার করবেন না! আপনার আবেদনটি এর সাথে মিলিত হয়নি। নিয়ন্ত্রণের বিপরীতে বলা হয়েছে: "অ্যাপ্লিকেশন ফ্রেমওয়ার্কটি নিয়ন্ত্রণ করে, ফ্রেমওয়ার্কটি অ্যাপ্লিকেশনটিকে নিয়ন্ত্রণ করে না"।

আশেপাশে ডিপেন্ডেন্সি ইনজেকশনের জন্য আরও কিছু অপশন রয়েছে, আমার মতে স্প্রিংসোর্সের লোকেরা অনেকগুলি পজো প্রোগ্রাম করেছে যা স্প্রিংসোর্সের লোকেরা অনেকগুলি সাধারণ কাঠামোর সাথে বসন্তকে সংহত করতে সহায়তা করে besides আপনার অ্যাপ্লিকেশন মধ্যে অনুপ্রবেশকারী। এছাড়াও, স্প্রিংয়ের বেশ কয়েকটি ভাল সাবপ্রজেক্টর রয়েছে যেমন স্প্রিং এমভিসি, স্প্রিং ওয়েবফ্লো, স্প্রিং সিকিউরিটি এবং আবার এসটেসেরগুলির একটি দীর্ঘ তালিকা list

আশাকরি এটা সাহায্য করবে. যাইহোক, আমি আপনাকে ডিপেন্ডেন্সি ইনজেকশন এবং নিয়ন্ত্রণের বিপরীতমুখী সম্পর্কে মার্টিন ফাউলারের নিবন্ধটি পড়তে উত্সাহিত করি কারণ তিনি এটি আমার চেয়ে ভাল করেন। বুনিয়াদিগুলি বোঝার পরে স্প্রিং ডকুমেন্টেশনটি একবার দেখুন , আমার মতে এটি এখনকার সেরা বসন্ত বই হিসাবে ব্যবহৃত হয়


148
কোড লাইন এবং এক্সএমএল একটি লাইন পরিবর্তন করার মধ্যে পার্থক্য কি? বাহ্যিক এক্সএমএল ফাইলগুলি যুক্তিযুক্তভাবে জটিলতা যুক্ত করার কারণে, প্রচেষ্টা এবং রক্ষণাবেক্ষণ নরকের হুবহু মিল, বা আরও খারাপ? দুঃখিত তবে আমি এটি পাচ্ছি না, আমি কোনও উপকার দেখতে পাচ্ছি না। যদি আমার কিছু মিস হয় তবে দয়া করে আমাকে পূরণ করুন।
ফ্রেড

23
@ ফ্রেড - আপনি ইউনিট পরীক্ষা করছেন তা কল্পনা করুন। নির্ভরতা ইনজেকশন ছাড়াই (ডিআইটি টিকা দিয়ে বা এক্সএমএল দিয়ে ব্যবহার করা যেতে পারে) আপনি সঠিকভাবে পরীক্ষা করতে পারবেন না, কারণ আপনি নির্ভরতাগুলি উপহাস করতে পারবেন না।
পেটার মিনচেভ

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

36
অথবা, আপনি জানেন, একটি কারখানার স্থির পদ্ধতি ব্যবহার করুন। কারখানার রিটার্নের ধরণটি পরিবর্তন করুন এবং এখন যে ক্লাসগুলি যে রিটার্ন মানটি ব্যবহার করে সেগুলির সমস্ত পরিবর্তন করা হয়েছে। প্রেস্টো স্প্রিংয়ের এখন আর দরকার নেই ...
কিউস - মণিকা

16
@ মিমক্র্রে আমি এক্সএমএল লেখার চেয়ে আমার আইডিইতে একটি রিফ্যাক্টরাইজেশন কল করব।
কিউস - মনিকি 16

63

বসন্তে একটি এমভিসি ফ্রেমওয়ার্ক রয়েছে ( স্কাফম্যান যথাযথভাবে নির্দেশিত হিসাবে )। সংক্ষেপে এখানে ব্যাখ্যা করার জন্য আমার ইনপুট রয়েছে। বসন্ত পরিষেবা স্তর, ওয়েব স্তর এবং ব্যবসায়ের স্তরকে পৃথক করার পক্ষে সমর্থন করে তবে এটি যা সর্বোত্তমভাবে কাজ করে তা হ'ল অবজেক্টগুলির "ইনজেকশন"। সুতরাং একটি উদাহরণ সহ এটি নীচের উদাহরণ বিবেচনা করুন:

public interface FourWheel
{
   public void drive();
}

public class Sedan implements FourWheel
{
   public void drive()
   {
      //drive gracefully
   }
}

public class SUV implements FourWheel
{
   public void drive()
   {
      //Rule the rough terrain
   }
}

এখন আপনার কোডে আপনার নিম্নরূপে রোডট্রিপ নামে একটি ক্লাস রয়েছে

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

এখন যখনই আপনি ট্রিপের উদাহরণ চান; কখনও কখনও আপনি এসওভি চাইলে ফোরওয়েল শুরু করতে পারেন বা কখনও কখনও আপনি সেলানও চাইতে পারেন। এটি নির্দিষ্ট পরিস্থিতির উপর নির্ভর করে আপনি যা চান তা নির্ভর করে।

এই সমস্যাটি সমাধান করার জন্য আপনি সৃজনশীল নিদর্শন হিসাবে একটি কারখানার প্যাটার্ন রাখতে চান। যেখানে একটি কারখানা সঠিক উদাহরণটি দেয়। সুতরাং অবশেষে আপনি কেবলমাত্র সঠিকভাবে অবজেক্টগুলিকে ইনস্ট্যান্ট করতে প্রচুর আঠা কোড দিয়ে শেষ করবেন। স্প্রিং সেই আঠালো কোড ব্যতীত আঠালো কোডের কাজটি সবচেয়ে ভাল করে। আপনি এক্সএমএলে ম্যাপিংগুলি ঘোষণা করেন এবং এটি স্বয়ংক্রিয়ভাবে বস্তুর সূচনা করে। এটি উদাহরণগুলির জন্য সিঙ্গলটন আর্কিটেকচার ব্যবহার করেও অনেক কিছু করে এবং এটি অনুকূলিত মেমরির ব্যবহারে সহায়তা করে।

এটিকে ইনভার্শন অফ কন্ট্রোলও বলা হয়। এটি করার জন্য অন্যান্য ফ্রেমওয়ার্কগুলি হ'ল গুগল গুইস, পিকো ধারক ইত্যাদি are

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

স্প্রিংয়ের আরও অনেক কিছুই রয়েছে যা "প্রো স্প্রিং" এর মতো ভাল বইতে পড়তে পারে।

নিম্নলিখিত ইউআরএলগুলিও সহায়ক হতে পারে।
http://static.springframework.org/docs/Spring-MVC-step-by-step/
http://en.wikedia.org/wiki/Spring_Framework
http://www.theserverside.com/tt/articles/article .tss? ঠ = SpringFramework


5
স্প্রিং রয়েছে একটি MVC ফ্রেমওয়ার্ক। তবে এটি অনেক বেশি, এর চেয়ে অনেক বেশি।
স্কেফম্যান

খুব বেশি নিতপিকের ইচ্ছা না করেই ওয়েবএমভিসি মূল বসন্তের ডিসট্রোর একটি অংশ। ওয়েবফ্লো, আরসিপি এবং অন্যান্য নয়।
স্কাফম্যান

1
এটি দুর্দান্ত, আমি জানতাম না যে আপনি জাভাতে ইন্টারফেস টাইপের অবজেক্টগুলি ইনস্ট্যান্ট করতে পারবেন - যা অবৈধ @ স্কাফম্যান আমাকে এই উত্তরটি বুঝতে সহায়তা করে (ফোরওহিলের উদাহরণ দেখুন)
জেসি ক্যাল্ডারন

47

প্রাচীন দিন, স্প্রিং শুধুমাত্র মত (ক নির্ভরতা ইনজেকশন ফ্রেম কাজ ছিল Guice , PicoContainer , ...) কিন্তু আজকাল এটি আপনার নির্মাণের জন্য মোট সমাধান এন্টারপ্রাইজ অ্যাপ্লিকেশন

বসন্ত নির্ভরতা ইনজেকশন, যা অবশ্যই, বসন্তের হৃদয় এখনও আছে (এবং আপনি এখানে অন্যান্য ভাল উত্তরগুলি পর্যালোচনা করতে পারেন), তবে বসন্ত থেকে আরও রয়েছে ...

বসন্তে এখন কয়েকটি উপ-প্রকল্প ( http://spring.io/projects ) সহ প্রচুর প্রকল্প রয়েছে । যখন কেউ বসন্ত সম্পর্কে কথা বলেন, আপনাকে অবশ্যই স্প্রিং প্রকল্পের কথা বলছেন তা খুঁজে বের করতে হবে, এটি কি কেবল বসন্তের মূল, যা বসন্তের কাঠামো হিসাবে পরিচিত , বা এটি অন্য একটি বসন্তের প্রকল্প projects

কিছু বসন্ত প্রকল্প যা উল্লেখযোগ্য মূল্য:

আপনার অ্যাপ্লিকেশনটির জন্য যদি আপনাকে আরও কিছু নির্দিষ্ট বৈশিষ্ট্যের প্রয়োজন হয় তবে আপনি এটি সেখানেও পেতে পারেন:


  • ব্যাচ অ্যাপ্লিকেশনটির বিকাশ সক্ষম করার জন্য তৈরি স্প্রিং ব্যাচ ব্যাচ ফ্রেমওয়ার্ক
  • HATEOAS অধ্যক্ষের উপর ভিত্তি করে বসন্ত HATEOAS REST এপিআই এর সহজ সৃষ্টি
  • মোবাইল অ্যাপ্লিকেশন বিকাশের জন্য স্প্রিং মোবাইল এবং স্প্রিং অ্যান্ড্রিওড
  • স্প্রিং শেল একটি পূর্ণ বৈশিষ্ট্যযুক্ত শেল (ওরফে কমান্ড লাইন) অ্যাপ্লিকেশন তৈরি করে
  • ক্লাউড অ্যাপ্লিকেশনগুলির জন্য স্প্রিং ক্লাউড এবং স্প্রিং ক্লাউড ডেটা ফ্লো

এখানে কয়েকটি ছোট ছোট প্রকল্প রয়েছে উদাহরণস্বরূপ বসন্ত-সামাজিক-ফেসবুক ( http://projects.spring.io/spring-social-facebook/ )

আপনি ওয়েব বিকাশের জন্য স্প্রিং ব্যবহার করতে পারেন কারণ এতে Spring MVCমডিউল রয়েছে যা স্প্রিং ফ্রেমওয়ার্ক প্রকল্পের অংশ । অথবা আপনি স্ট্রুট 2 এর মতো অন্য ওয়েব ফ্রেমওয়ার্কের সাথে বসন্ত ব্যবহার করতে পারেন ।


1
আমি আসলে দেখতে চাই এমভিসি, ডেটা, জেপিএ এবং স্প্রিং এর অন্যান্য অংশগুলিতে স্প্রিংয়ের মূল ডিআই ব্যবহার না করার একটি বিকল্প রয়েছে তবে তার পরিবর্তে স্প্রিংয়ের কেন্দ্রে ডগার লাগিয়ে দিন।
dlamblin

25

বসন্ত কীসের জন্য? আমি শীঘ্রই এই প্রশ্নের উত্তর দেব, তবে প্রথমে, আসুন বিজয়ী হুগোর উদাহরণটি দেখে নেওয়া যাক। এটি একটি দুর্দান্ত উদাহরণ নয় কারণ এটি একটি নতুন কাঠামোর প্রয়োজনকে ন্যায়সঙ্গত করে না।

public class BaseView {
  protected UserLister userLister;

  public BaseView() {
    userLister = new UserListerDB(); // only line of code that needs changing
  }
}

public class SomeView extends BaseView {
  public SomeView() {
    super();
  }

  public void render() {
    List<User> users = userLister.getUsers();
    view.render(users);
  }
}

সম্পন্ন! সুতরাং এখন আপনার কাছে কয়েকশ বা হাজার হাজার ভিউ থাকলেও, আপনার এখনও স্প্রিং এক্সএমএল পদ্ধতির মতো কোডের এক লাইন পরিবর্তন করতে হবে। আপনি কোডটি XML সম্পাদনার বিপরীতে কোডের একটি লাইন পরিবর্তনের জন্য পুনরায় সংশোধন করা দরকার? আচ্ছা আমার দুষ্টু বন্ধু, পিপীলিকা এবং স্ক্রিপ্টটি দূরে ব্যবহার করুন!

সুতরাং বসন্ত কি জন্য? এটার জন্য:

  1. অন্ধ বিকাশকারীরা যারা এই পশুর অনুসরণ করে
  2. যে ইউনিয়নগুলিতে ইউনিতে এ জাতীয় ফ্রেমওয়ার্ক শেখানো হয় না এমন নিয়োগকারীরা কখনও গ্র্যাজুয়েট প্রোগ্রামারদের নিয়োগ করতে চান না
  3. যে প্রকল্পগুলি খারাপ ডিজাইন দিয়ে শুরু হয়েছিল এবং প্যাচওয়ার্ক প্রয়োজন (ভিক্টর হুগোর উদাহরণ হিসাবে দেখানো হয়েছে)

আরও পড়া: http://discuss.joelonsoftware.com/?joel.3.219431.12


11
হতাশাকে বাদ দিয়ে আমি আপনার যুক্তি নিয়ে ভাবছি wond আমি কোনও প্রোগ্রামিং সরঞ্জাম জানি না যা আপনি খারাপ ডিজাইন তৈরি করতে ব্যবহার করতে পারবেন না। আপনি যা লক্ষ্য করছেন তা হ'ল ফ্রেমওয়ার্কগুলি ব্যবহার করে আপনি প্রচুর পরিমাণে খারাপ কোড তৈরি করতে পারেন। এটি সর্বজনীন সত্য এবং স্প্রিংয়ের সাথে নির্দিষ্ট নয়। নাহলে কী লাভ? আপনি কি মনে করেন না যে সক্ষম বিকাশকারীরা বসন্তের যা যা দেওয়া আছে তার দুর্দান্ত ব্যবহার করতে পারে - বিশেষত ফ্রেমওয়ার্কের কোন সরঞ্জামগুলি তারা ব্যবহার করে? কমপক্ষে আমি যথেষ্ট নিশ্চিত যে আপনি বোঝাচ্ছেন না যে কোনও স্প্রিং বিকাশকারী কখনও ক্লাস বাড়ানোর কথা শুনেনি। যদিও আরও পড়াটি হাসিখুশি।
sthzg

2
তদুপরি, আপনার উদাহরণটি কাজ করে কারণ দেখার জন্য কেবলমাত্র একটি ইনজেকশনের পরিষেবা প্রয়োজন ( UserLister), তবে যদি এটির বিভিন্ন পরিষেবাদির প্রয়োজন হয় তবে বিভিন্ন সন্তানের মধ্যে ভাগ না করা হয় BaseView? জাভাতে (ভাগ্যক্রমে) একাধিক উত্তরাধিকার নেই।
এডুয়ার্ড বার্থে

@ এডওয়ার্ডবার্ট ফেয়ার পয়েন্ট আমার উত্তরটি ডিআইআইকে উপেক্ষা করার চেষ্টা ছিল না, এটি কেবল স্বীকৃত উত্তরে প্রদর্শিত উদাহরণটি দেখায় যে সবচেয়ে বড় নয়; আপনি যে দৃশ্যের প্রস্তাব করছেন সেটি সম্ভবত আরও ভাল কাজ করবে। আমি যে বিষয়টি সত্যই চেষ্টা করতে চাইছিলাম তা হ'ল আপনার ডিআইয়ের দরকার নেই, বরং এটি করার জন্য আপনার পুরো কাঠামোর দরকার নেই।
অ্যাশ

19

খুব সংক্ষেপে সংক্ষেপে, আমি বলব যে স্প্রিংটি আপনার আবেদনের "আঠালো"। এটি বিভিন্ন ফ্রেমওয়ার্ক এবং আপনার নিজস্ব কোড সংহত করতে ব্যবহৃত হয়।


15

বসন্ত তিনটি জিনিস।

  1. স্প্রিং নির্ভরতা ইনজেকশন পরিচালনা করে এবং আমি আপনাকে নির্ভরতা ইনজেকশন সম্পর্কিত মার্টিন ফাউলারের দুর্দান্ত ভূমিকা পড়ার পরামর্শ দিই।
  2. দ্বিতীয় জিনিসটি স্প্রিংটি হ'ল আপনার অ্যাপ্লিকেশনগুলিতে ব্যবহারের জন্য খুব মার্জিত উপায়ে দুর্দান্ত জাভা লাইব্রেরিগুলি মোড়ানো। একটি ভাল উদাহরণের জন্য দেখুন কীভাবে স্প্রিং টাস্ক এক্সিকিউটার এবং কোয়ার্টজ শিডিয়ুলারকে মোড়ানো করে।
  3. তৃতীয়ত স্প্রিং আরএসটি, একটি এমভিসি ওয়েব ফ্রেমওয়ার্ক এবং আরও অনেক কিছু ওয়েব স্টাফ বাস্তবায়ন করে। আপনি যেহেতু প্রথম দুটি জন্য স্প্রিং ব্যবহার করছেন সেগুলি এগুলি চিত্রিত করে, সম্ভবত আপনি এটি আপনার ওয়েব অ্যাপ্লিকেশনটির প্রয়োজনীয় সমস্ত কিছুর জন্য ব্যবহার করতে পারেন।

সমস্যাটি হ'ল স্প্রিং ডিআই সত্যিই ভালভাবে চিন্তাভাবনা করে, অন্যান্য জিনিসগুলির চারপাশের মোড়কগুলি সত্যই ভালভাবে চিন্তা করে থাকে যে অন্যান্য জিনিসগুলি সবকিছু চিন্তা করে এবং স্প্রিংটি কেবল সুন্দরভাবে এটি মুড়ে দেয়। এমভিসি এবং আরএসটি ও অন্যান্য সমস্ত স্ট্রিংয়ের বসন্ত বাস্তবায়নগুলি ভালভাবে সম্পন্ন হয়নি (ওয়াইএমএমভি, আইএমএইচও) তবে ব্যতিক্রম রয়েছে (স্প্রিং সিকিউরিটি দা বোম্ব)। সুতরাং আমি ডিআই এর জন্য স্প্রিং এবং তার শীতল র‌্যাপার ব্যবহার করার ঝোঁক রাখি তবে ওয়েবে অন্যান্য জিনিস পছন্দ করি (আমি টেপস্ট্রি অনেক পছন্দ করি), রিস্ট (জার্সি সত্যই শক্তিশালী) ইত্যাদি


9
ওয়াইএমএমভি, আইএমএইচও - আপনার মাইলেজ ভেরিয়ে উঠতে পারে, আপনার মতো যারা আমার মতো সংক্ষিপ্তসারগুলিতে সাবলীল হন না তাদের পক্ষে আমার নম্র মতামত ...
সাকামোতো কাজুমা

11

আপনি সম্ভবত একটি স্প্রিংয়ের সাথে ওয়েব অ্যাপ্লিকেশনটিতে যা চান তা -

  • স্প্রিং এমভিসি, যা 2.5+ এর সাহায্যে আপনাকে POJO গুলি কন্ট্রোলার ক্লাস হিসাবে ব্যবহার করতে দেয়, যার অর্থ আপনার কোনও নির্দিষ্ট ফ্রেমওয়ার্ক থেকে প্রসারিত করতে হবে না (যেমন স্ট্রুটস বা স্প্রিং প্রাক-2.5)। কন্ট্রোলার ক্লাসগুলি নির্ভরতা ইনজেকশনের অংশে ধন্যবাদ পরীক্ষা করার জন্য মরেও সহজ
  • হাইবারনেটের সাথে বসন্তের সংহতকরণ, যা সেই ওআরএম সমাধান (বেশিরভাগ ক্ষেত্রে) সমাধানের সাথে সহজ করার কাজ করে job
  • একটি ওয়েব অ্যাপ্লিকেশনের জন্য স্প্রিং ব্যবহার আপনাকে অ্যাপ্লিকেশনটির সমস্ত স্তরে আপনার ডোমেন অবজেক্টগুলি ব্যবহার করতে সক্ষম করে - হিবারনেট ব্যবহার করে ম্যাপ করা একই ক্লাসগুলি হ'ল "ফর্ম বিনস" হিসাবে ব্যবহৃত ক্লাস are প্রকৃতির দ্বারা, এটি আরও শক্তিশালী ডোমেন মডেলকে নেতৃত্ব দেবে, অংশে এটি ক্লাসের সংখ্যা হ্রাস করতে চলেছে।
  • স্প্রিং ফর্ম ট্যাগগুলি খুব ঝামেলা ছাড়াই ফর্মগুলি তৈরি করা সহজ করে।

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


9

আমি এর দুটি অংশ দেখতে পাচ্ছি:

  1. "স্প্রিং ঠিক কী জন্য" -> বিজয়ী হুগো কর্তৃক গৃহীত উত্তর দেখুন।
  2. "[...] স্প্রিং হ'ল ওয়েব বিকাশের জন্য একটি ভালো কাঠামো" -> লোকেরা এটি স্প্রিং এমভিসি সম্পর্কে কথা বলছে। স্প্রিং এমভিসি হ'ল বসন্তের অনেকগুলি অংশের একটি এবং এটি একটি ওয়েব ফ্রেমওয়ার্ক যা নির্ভরতা ইঞ্জেকশনের মতো বসন্তের সাধারণ বৈশিষ্ট্যগুলি ব্যবহার করে। এটি একটি দুর্দান্ত জেনেরিক কাঠামো যাতে এটি অত্যন্ত কনফিগারযোগ্য: আপনি বিভিন্ন ডিবি স্তর (হাইবারনেট, আইবাটিস, প্লেইন জেডিবিসি), বিভিন্ন দর্শন স্তর (জেএসপি, वेग, ফ্রি মার্কার ...) ব্যবহার করতে পারেন

নোট করুন যে আপনি স্প্রিং এমভিসি ব্যবহার না করেই ওয়েল অ্যাপ্লিকেশনটিতে পুরোপুরি ভালভাবে ব্যবহার করতে পারেন। আমি বলব বেশিরভাগ জাভা ওয়েব অ্যাপ্লিকেশনগুলি এটি করে, যখন অন্যান্য ওয়েব ফ্রেমওয়ার্ক যেমন উইকেট, স্ট্রুটস, সিম, ...


8

একসাথে ক্লাসের দৃষ্টিনন্দন দৃষ্টান্তের জন্য বসন্ত দুর্দান্ত। আপনি জানেন যে আপনার হাইবারনেট ক্লাসগুলিতে সর্বদা একটি ডেটাসোর্সের দরকার পড়ে, স্প্রিং তারগুলি একসাথে দেয় (এবং এটি ডেটাসোর্সের একটি বাস্তবায়নও রয়েছে)।

আপনার ডেটা অ্যাক্সেস অবজেক্টের সর্বদা হাইবারনেট অ্যাক্সেসের প্রয়োজন হবে, স্প্রিং আপনার জন্য হাইবারনেট ক্লাসগুলি আপনার ডিএওগুলিতে রাখে।

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

বসন্ত আসলেই একটি দুর্দান্ত সরঞ্জাম। (আমি স্প্রিং এমভিসির কথা বলছিলাম না, কেবল বেস কাঠামো)।


5

কনফিগারেশনের জন্য স্প্রিং বিভিন্ন টীকাগুলির জন্য সমর্থন প্রবর্তন করার পরে স্বীকৃত উত্তরটিতে টীকাগুলির ব্যবহার জড়িত না।

বসন্ত (নির্ভরতা ইনজেকশন) পদ্ধতির

এক্সএমএল ফাইলটি ব্যবহারের পাশাপাশি ক্লাসগুলি তারের করার অন্য একটি উপায়: টিকা। এর গৃহীত উত্তর থেকে উদাহরণস্বরূপ ব্যবহার করতে দিন এবং সরাসরি শিম রেজিস্টার করো বর্গ টীকা এক ব্যবহার করে @Component, @Service, @Repositoryবা @Configuration:

@Component
public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

এভাবে যখন দৃশ্যটি তৈরি করা হবে তখন যাদুতে এটির জন্য ব্যবহারকারীর তালিকা প্রস্তুত থাকবে।

উপরোক্ত বিবৃতিটি কোনও এক্সএমএল ফাইল ব্যবহারের প্রয়োজন নেই এবং অন্য একটি টীকা সহ ওয়্যারিং যা @Autowiredপ্রাসঙ্গিক বাস্তবায়ন খুঁজে পায় এবং এতে ইনজেকশন দেয় তার সামান্য বোনাস দিয়ে বৈধ ।

@Autowired
private UserLister userLister;

@Beanসিম প্রয়োগ বাস্তবায়নের জন্য ইনজেকশন পেতে একটি পদ্ধতিতে টীকাটি ব্যবহার করুন ।


ভুল। আপনি @Beanক্লাস স্তরে টিকাটি ব্যবহার করতে পারবেন না । এক হওয়া আবশ্যক @Component, @Service, @Repositoryইত্যাদি বিশ্রাম সঠিক। আপনার সম্ভবত এটিও উল্লেখ করা উচিত যে এইভাবে ইন্টারফেসটিকে অটোরিয়িং করা কেবল তখনই কাজ করবে যদি ক্লাসপথে কেবলমাত্র 1 জন পরীক্ষার্থী শ্রেণি ইনজেকশনের জন্য উপযুক্ত হয়, অন্যথায় স্প্রিং অ্যাপ্লিকেশন ত্রুটি।
স্টেফানো এল

@ স্টেফানোল: হ্যাঁ, আপনি ঠিক বলেছেন। আমি আশ্চর্য হয়েছি যে মানুষ আমার ভুলটিকে উপেক্ষা করেছে। মন্তব্যের জন্য ধন্যবাদ.
নিকোলাস

4

সুবিধাটি হ'ল ডিপেন্ডেন্সি ইনজেকশন (ডিআই) । এর অর্থ অবজেক্ট তৈরির কাজ আউটসোর্সিং। আমাকে একটি উদাহরণ দিয়ে ব্যাখ্যা করুন।

public interface Lunch
{
   public void eat();
}

public class Buffet implements Lunch
{
   public void eat()
   {
      // Eat as much as you can 
   }
}

public class Plated implements Lunch
{
   public void eat()
   {
      // Eat a limited portion
   }
}

এখন আমার কোডে আমার নিম্নোক্তভাবে একটি ক্লাস লাঞ্চডিসাইড রয়েছে:

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(){
        this.todaysLunch = new Buffet(); // choose Buffet -> eat as much as you want
        //this.todaysLunch = new Plated(); // choose Plated -> eat a limited portion 
    }
}

উপরের শ্রেণিতে, আমাদের মেজাজের উপর নির্ভর করে আমরা বুফে () বা ধাতুপট্টাবৃত () বেছে নিই। তবে এই সিস্টেমটি শক্তভাবে মিলিত হয়। প্রতিবার যখন আমাদের আলাদা ধরণের অবজেক্টের প্রয়োজন হয় তখন আমাদের কোডটি পরিবর্তন করতে হবে। এই ক্ষেত্রে, একটি লাইন মন্তব্য! ভাবুন এখানে 50 টি বিভিন্ন শ্রেণীর 50 জন লোক ব্যবহার করেছেন। এটি একটি জগাখিচুড়ি হবে। এই ক্ষেত্রে, আমাদের সিস্টেমটি ডিকুয়াল করা দরকার। আসুন লাঞ্চডিসাইড ক্লাসটি আবার লিখি।

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(Lunch todaysLunch){
        this.todaysLunch = todaysLunch
        }
    }

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


তবে এমনকি বসন্তের ক্ষেত্রে, আমরা এখনও মটরশুটি সংজ্ঞায়িত করব। এবং কোডটিতে বিন বিন দেওয়া হবে, তাই না? তাই আপনি যদি আগামীকাল শিম পরিবর্তন করেন, আপনাকে এখনও কোডটি পরিবর্তন করতে হবে, তাই না? সুতরাং লাভ কি?
অর্পান বুচ

@ আরপানবুচ আমি মনে করি বসন্তের উপকারটি হ'ল আপনি কোনও কোড পুনরায় সংশোধন না করেই আলাদা বাস্তবায়ন বেছে নিতে পারেন (যতক্ষণ না অন্য বাস্তবায়ন ইতিমধ্যে বিদ্যমান রয়েছে)। আমি একটি শিক্ষানবিস, তাই আমি ভুল হতে পারে।
বাইডোর

4
  • বসন্তটি J2EE এর সাথে তুলনা করা একটি হালকা ও নমনীয় কাঠামো।
  • বসন্তের ধারক নিয়ন্ত্রণের বিপরীত হিসাবে কাজ করে।
  • বসন্তে এওপি অর্থাৎ প্রক্সি এবং সিঙ্গলটন, কারখানা এবং টেম্পলেট পদ্ধতি নকশার নিদর্শনগুলি ব্যবহার করে।
  • টায়ার্ড আর্কিটেকচার: উদ্বেগ এবং পুনরায় ব্যবহারযোগ্য স্তর পৃথককরণ এবং সহজ রক্ষণাবেক্ষণ।

এখানে চিত্র বর্ণনা লিখুন


1
Spring Framework help you with several things like, don't reinvent the wheel. you can connect very easily with some database just using Spring Data, or create schedule tasks like CronJob or Windows Task. amazing !
tomj0101

3

এন্টারপ্রাইজ জাভাবিন্স (ইজেবি) প্রযুক্তির জন্য বসন্ত একটি ভাল বিকল্প । এটিতে ওয়েব ফ্রেমওয়ার্ক এবং ওয়েব পরিষেবাদিগুলির কাঠামোর উপাদান রয়েছে।


1
আমি কি সংশোধন করতে পারি? (ভয়াবহ) ইজেবি 2 এর বিকল্প ছিল ... "নতুন ইজেবি" বলে মনে হচ্ছে (অংশে, জেপিএ 2 ইত্যাদি) গ্রোভিং গ্রহণযোগ্যতা রয়েছে। বসন্তের অংশের "শুভ ঘন্টা" "এক প্রকার ইজেবি" অতীত বলে মনে হচ্ছে। বিজ্ঞাপন 2015
জ্যাসেক সিজেড

1

মোটামুটি সহজ নির্ভরতা ইনজেকশন সিস্টেম হিসাবে বসন্ত শুরু হয়েছিল। এখন এটি বিশাল এবং এটিতে সমস্ত কিছু রয়েছে (প্রবাদ বাক্সের রান্নাঘর সিঙ্ক ব্যতীত)।

তবে ভয় পাবেন না, এটি বেশ মডুলার যাতে আপনি চাইলে কেবল টুকরো ব্যবহার করতে পারেন।

এটি কোথায় শুরু হয়েছে তা দেখার জন্য:

http://www.amazon.com/Expert-One-Design-Development-Programmer/dp/0764543857/ref=sr_1_1?ie=UTF8&s=books&qid=1246374863&sr=1-1

এটি পুরানো হতে পারে তবে এটি একটি দুর্দান্ত বই।

অন্য একটি ভাল বইয়ের জন্য এবার স্প্রিংয়ের প্রতি একচেটিয়াভাবে উত্সর্গ করা:

http://www.amazon.com/Professional-Java-Development-Spring-Framework/dp/0764574833/ref=sr_1_2?ie=UTF8&s=books&qid=1246374863&sr=1-2

এটি বসন্তের পুরানো সংস্করণগুলিকেও উল্লেখ করে তবে এটি অবশ্যই দেখার মতো।


1

শুরুতে বসন্ত নির্ভরতা ইনজেকশন ছিল, তারপরে প্রায় সমস্ত কিছুর জন্য জড়িত রাজার যুক্ত করুন (জেপিএ বাস্তবায়নের উপর মোড়ক ইত্যাদি)।

দীর্ঘ গল্প ... স্প্রিং প্রিফার এক্সএমএল সলিউশনগুলির বেশিরভাগ অংশ (এক্সএমএল স্ক্রিপ্টিং ইঞ্জিন ... ব্রিরর), তাই ডিআই-র জন্য আমি গুইস ব্যবহার করি

ভাল লাইব্রেরি, তবে ক্রমবর্ধমান ডিপেনডেন্সিয়াকের সাথে, উদাহরণস্বরূপ স্প্রিং জেডিবিসি (প্রকৃত নামের পরামিতিগুলির সাথে একটি জাভা জেডিবিসি সলিউশন) পরবর্তী 4-5 থেকে নেওয়া উচিত।

ওয়েব বিকাশের জন্য স্প্রিং এমভিসি ("বড় বসন্ত" এর অংশ) ব্যবহার করে ... এটি "অনুরোধ ভিত্তিক" কাঠামো, পবিত্র যুদ্ধ "অনুরোধ বনাম উপাদান" রয়েছে ... আপনার অবধি


1
আমি বিশ্বাস করি এখন স্প্রিং ফ্রেমওয়ার্কটি এক্সএমএল থেকে টিকা এবং জাভা কনফিগারেশনে সরানোর চেষ্টা করছে।
মাকসিম

0

অতীতে আমি স্প্রিং ফ্রেমওয়ার্ক সম্পর্কে বিশুদ্ধভাবে প্রযুক্তিগত দিক থেকে ভেবেছিলাম thought

দলের কাজ কিছু অভিজ্ঞতা এবং উন্নয়নশীল এন্টারপ্রাইজ webapps দেওয়া - আমি বলতে চাই যে স্প্রিং জন্য অ্যাপ্লিকেশন দ্রুত উন্নয়ন দ্বারা (ওয়েব অ্যাপ্লিকেশন) decoupling তার কোন একক উপাদান (মটরশুটি)। দ্রুততর বিকাশ এটিকে এত জনপ্রিয় করে তোলে। স্প্রিংটি স্প্রিং ফ্রেমওয়ার্কটিতে অ্যাপ্লিকেশন তৈরির (ওয়্যারিং আপ) পরিবর্তনের দায়িত্বকে সরিয়ে দেয়। স্প্রিং ফ্রেমওয়ার্কের নির্ভরতা ইনজেকশনটি পৃথক মটরশুটিকে একটি কাজের অ্যাপ্লিকেশনে সংযোগ / তারের জন্য দায়বদ্ধ।

শিমের মধ্যে ইন্টারফেস সংজ্ঞায়িত হওয়ার সাথে সাথে বিকাশকারীরা পৃথক উপাদানগুলির (বীস) বিকাশের দিকে আরও মনোনিবেশ করতে পারে।

এই জাতীয় প্রয়োগের পরীক্ষা সহজ - প্রাথমিক ফোকাস পৃথক মটরশুটি দেওয়া হয়। এগুলি সহজেই ডিকপলড এবং উপহাস করা যায়, তাই ইউনিট-পরীক্ষা দ্রুত এবং দক্ষ।

স্প্রিং ফ্রেমওয়ার্ক একাধিক বিশেষায়িত শিমের সংজ্ঞা দেয় যেমন @ কন্ট্রোলার ( @ রেস্টকন্ট্রোলার ), @ রিপোসিটরি , @ কম্পোনেন্ট ওয়েব উদ্দেশ্যগুলি পরিবেশন করতে। ম্যাভেনের সাথে একসাথে বসন্ত এমন একটি কাঠামো সরবরাহ করে যা বিকাশকারীদের জন্য স্বজ্ঞাত। দলগত কাজ সহজ এবং দ্রুত কারণ পৃথক উপাদান পৃথক রাখা হয়েছে এবং পুনরায় ব্যবহার করা যেতে পারে।


0

ওয়েব বিকাশের জন্য এবং স্পর্শকৃত এপিআই পরিষেবাদির জন্য আরও সুনির্দিষ্ট হওয়ার জন্য স্প্রিং ফ্রেমওয়ার্কটি অবশ্যই স্পষ্টভাবে ভাল।

এটি নির্ভরতা ইঞ্জেকশন এবং বসন্ত সুরক্ষা , স্প্রিং এওপি , এমভিসি ফ্রেমওয়ার্ক , মাইক্রোসার্চেসির মতো অন্যান্য মডিউলগুলির সাথে একীকরণের কারণে এটি উপরের পক্ষে ভাল It

যে কোনও অ্যাপ্লিকেশন সহ, সুরক্ষা সম্ভবত একটি প্রয়োজনীয়তা।
যদি আপনি এমন কোনও পণ্য তৈরির লক্ষ্য রাখেন যার দীর্ঘ রক্ষণাবেক্ষণ প্রয়োজন, তবে আপনাকে এওপি ধারণাটি ব্যবহার করতে হবে।

যদি আপনার অ্যাপ্লিকেশনটিতে এইভাবে বোঝা বাড়াতে প্রচুর ট্র্যাফিক হয় তবে আপনাকে মাইক্রোসার্ভেসেস ধারণাটি ব্যবহার করতে হবে।

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

স্প্রিং ডেটা এমন একটি প্রকল্প যা আপনার প্রকল্পের সাথে সংহতকরণ সরবরাহ করে।


সুতরাং বসন্ত প্রায় প্রতিটি প্রয়োজনের মধ্যে ফিট করতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.