স্প্রিং বিনপোস্টপ্রসেসর ঠিক কীভাবে কাজ করে?


98

আমি স্প্রিং কোর শংসাপত্রের জন্য অধ্যয়ন করছি এবং স্প্রিং কীভাবে শিমের জীবনচক্র পরিচালনা করে এবং বিশেষত শিম পোস্ট প্রসেসর সম্পর্কে আমার কিছু সন্দেহ রয়েছে ।

সুতরাং আমি এই স্কিমা আছে:

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

এর অর্থ কী তা আমার পক্ষে বেশ স্পষ্ট:

লোড শিম সংজ্ঞা পর্যায়ে নিম্নলিখিত পদক্ষেপগুলি গ্রহণ করে :

  • @Configuration শ্রেণীর প্রসেস করা হয় এবং / অথবা @Components জন্য এবং / অথবা স্ক্যান করা হয় XML ফাইল পার্স করা হয়।

  • বিনের সংজ্ঞাগুলি বিয়ানফ্যাক্টরিতে যুক্ত করা হয়েছে (প্রতিটি তার আইডি অনুসারে সূচিত)

  • বিশেষ বিয়ানফ্যাক্ট্রিপোস্টপ্রসেসর বিনগুলি অনুরোধ করা হয়েছে, এটি যে কোনও শিমের সংজ্ঞাটি সংশোধন করতে পারে (উদাহরণস্বরূপ সম্পত্তি-স্থানধারক মান প্রতিস্থাপনের জন্য)।

তারপরে মটরশুটি তৈরির পর্যায়ে নিম্নলিখিত পদক্ষেপগুলি গ্রহণ করে :

  • প্রতিটি শিমটি অধীর আগ্রহে ডিফল্ট হিসাবে ইনস্ট্যান্ট করা হয় (এটির সাথে নির্ভরশীলতার সাথে সঠিক ক্রমে তৈরি করা হয়)।

  • নির্ভরতা ইনজেকশনের পরে প্রতিটি শিম একটি পোস্ট-প্রসেসিং পর্যায়ে যায় যেখানে আরও কনফিগারেশন এবং সূচনা হতে পারে।

  • পোস্ট প্রসেসিংয়ের পরে শিমটি সম্পূর্ণরূপে আরম্ভ করা হয় এবং ব্যবহারের জন্য প্রস্তুত হয় (প্রসঙ্গটি বিনষ্ট না হওয়া পর্যন্ত তার আইডি দ্বারা ট্র্যাক করা হয়)

ঠিক আছে, এটি আমার পক্ষে বেশ স্পষ্ট এবং আমি আরও জানি যে সিম পোস্ট প্রসেসর দুটি ধরণের যা হ'ল :

  • ইনিশিয়ালাইজারস: নির্দেশ দেওয়া থাকলে শিমটি শুরু করুন (যেমন @ পোষ্টকনস্ট্রাক্ট)।

  • এবং বাকী সমস্ত: যা অতিরিক্ত কনফিগারেশনের অনুমতি দেয় এবং এটি প্রাথমিক পর্যায়ে বা তার আগে চলতে পারে

এবং আমি এই স্লাইড পোস্ট:

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

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

তবে অন্য শিম পোস্ট প্রসেসরের ঠিক কী উপস্থাপন করে? আমরা যখন বলি যে এই ধাপগুলি আরম্ভের পর্যায়ে আগে বা তার পরে সঞ্চালিত হয় তখন আমরা কী বলতে চাই ?

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

এবং যখন আমরা বলি যে এটি আরম্ভের পদক্ষেপের পরে সঞ্চালিত হয় তখন ঠিক কী বোঝায় । এর মানে হল যে এটির পরে ঘটে @ @ পোস্টকন্ট্রাক্ট টীকাযুক্ত পদ্ধতি কার্যকর করা , বা কী?

আমি সহজেই আমার মাথার মধ্যে এটি অনুগ্রহ করতে পারি যে আমাকে কেন একটি @ পোষ্টকন্ট্রাক্ট টীকাযুক্ত পদ্ধতি দরকার তবে আমি অন্য ধরণের শিম পোস্ট প্রসেসরের কিছু সাধারণ উদাহরণ বুঝতে পারি না, আপনি কখন ব্যবহার করবেন তার কিছু সাধারণ উদাহরণ দেখাতে পারেন?


আমি নিশ্চিত যে আপনার স্লাইডগুলির চিত্রগুলি ভাগ করা উচিত নয় :)
রেগ

@ রেগ এই চিত্রগুলি কোন সঠিক কোর্স / উপস্থাপনা থেকে এসেছে?
মালভন

@ মালভন এটি পিভোটালের অফিসিয়াল স্প্রিং কোর কোর্সের আগের সংস্করণ থেকে এসেছে। এবং বিটিডব্লিউ - আপনি যদি পরীক্ষার জন্য প্রস্তুতি নিচ্ছেন তবে এক্সএমএল দিয়ে যে কোনও কিছু উপেক্ষা করুন :)
রেগ করুন

@ রেগ আসলে প্রশিক্ষণ ক্লাসে না গিয়ে কোর্স কেনার কোন উপায় আছে?
মালভন

আমি ভাবছি ডায়াগ্রামের এই রক্তবর্ণ অংশে "পোস্ট প্রসেস শিমের সংজ্ঞা" কী হয়?
অক্ষয় হীরামঠ

উত্তর:


50

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

একটি কাস্টম বিপিপি পছন্দ মত

public class CustomBeanPostProcessor implements BeanPostProcessor {

    public CustomBeanPostProcessor() {
        System.out.println("0. Spring calls constructor");
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName)
            throws BeansException {
        System.out.println(bean.getClass() + "  " + beanName);
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName)
            throws BeansException {
        System.out.println(bean.getClass() + "  " + beanName);
        return bean;
    }
}

বলা হবে এবং প্রতিটি তৈরি শিমের জন্য ক্লাস এবং শিমের নাম মুদ্রণ করা হবে।

পদ্ধতিটি কীভাবে শিমের জীবনচক্রের সাথে খাপ খায় এবং কীভাবে পদ্ধতিটি ডাকা হয় ডক্সগুলি পরীক্ষা করে

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

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

গুরুত্বপূর্ণ বিট এটি হয়

শিম ইতিমধ্যে সম্পত্তি মান সহ জনবহুল হবে।

এর সাথে সম্পর্কের বিষয়টি কীসের জন্য উদ্বেগজনক @PostConstructএই টীকাটি কোনও postProcessAfterInitializationপদ্ধতি ঘোষণা করার একটি সুবিধাজনক উপায় এবং এই নোটের এবং স্প্রিং কনফিগারেশন ফাইলটি রেজিস্ট্রেশন করে CommonAnnotationBeanPostProcessorবা নির্দিষ্ট করে <context:annotation-config />নিলে স্প্রিং এটি সম্পর্কে সচেতন হয় । @PostConstructপদ্ধতিটি অন্য কোনও আগে বা পরে সম্পাদিত হবে কিনা postProcessAfterInitializationতা orderসম্পত্তির উপর নির্ভর করে

আপনি একাধিক বিয়ানপোস্টপ্রসেসর ইনস্ট্যান্স কনফিগার করতে পারেন এবং আপনি এই বিনপস্টপ্রসেসরগুলি অর্ডার বৈশিষ্ট্য নির্ধারণ করে যে ক্রমটি সম্পাদন করে তা আপনি নিয়ন্ত্রণ করতে পারেন।


31

শিম পোস্ট প্রসেসরের জন্য আদর্শ উদাহরণটি হ'ল আপনি যখন প্রক্সি দৃষ্টিতে আসল বিনকে আবৃত করতে চান, উদাহরণস্বরূপ @Transactional টীকাটি ।

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


6
বাস্তব জীবনের উদাহরণ হিসাবে কুডোস!
রাইস

শুধু তত্ত্ব নয়, প্রকৃত ব্যবহারের কেস সরবরাহ করার জন্য ধন্যবাদ
অমল আগরওয়াল

5

পার্থক্যটি হ'ল BeanPostProcessorকনটেক্সট ইনিশিয়ালেশনের পরে কল করুন postProcessBeforeInitializationএবং postProcessAfterInitializationসমস্ত সংজ্ঞায়িত মটরশুটি।

তবে @PostConstructসুনির্দিষ্ট নির্দিষ্ট শ্রেণীর জন্য আপনি কনস্ট্রাক্টর বা সেট পদ্ধতির পরে বিন সিমটি তৈরি করতে চান for

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