বসন্ত স্কোপড প্রক্সি শিম


98

কেউ বসন্তের @ScopedProxyটীকাটির ব্যবহার ব্যাখ্যা করতে পারেন ? আমি ভেবেছিলাম সেশন স্কোপড শিমের সাথে এর কিছু করার আছে তবে আমি কী নিশ্চিত তা নিশ্চিত নই।

আমার স্কোপগুলির ব্যবহারে, আমি @ScopedProxyটীকা ছাড়াই (বা এপ স্কোপড প্রক্সি ছাড়াই) সেশন স্কোপড মটরশুটি ব্যবহার করেছি , সুতরাং কীভাবে এটি সঠিকভাবে ব্যবহার করবেন তা নিশ্চিত sure


মটরশুটি ডকুমেন্টেশন পরীক্ষা করে দেখুন । সেশনটি স্কোপের একটি , তবে একমাত্র নয়।
Gus

4
@ গুস, আমি স্কোপগুলি সম্পর্কে অবহিত, স্কোপড প্রক্সি এতে কীভাবে খেলবে তা ঠিক নিশ্চিত নয়
জেফ স্টোরি

4
বিভাগ ৩.৪.৪.৫ হল আমার মতে একটি স্কোপড প্রক্সি কী করে তার বেশ ভাল ব্যাখ্যা। - দুটি উদাহরণের মধ্যে বিটটি গুরুত্বপূর্ণ অংশ।
Gus

4
হ্যাঁ এটি ব্যাখ্যা করে, ধন্যবাদ। আপনি যদি প্রশ্নের উত্তর যুক্ত করতে চান তবে আমি গ্রহণ করব।
জেফ স্টোরি

উত্তর:


249

স্প্রিং ডক্সের বিভাগ 3.4.4.5 এটিকে সুন্দরভাবে ব্যাখ্যা করেছে:

(দয়া করে নোট করুন যে নিম্নলিখিত 'ব্যবহারকারীর পছন্দসই' শিমের সংজ্ঞা হিসাবে এটি দাঁড়িয়েছে অসম্পূর্ণ):

<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>

<bean id="userManager" class="com.foo.UserManager">
    <property name="userPreferences" ref="userPreferences"/>
</bean>

উপরের কনফিগারেশন থেকে এটি স্পষ্ট যে সিঙ্গলটন বিন 'ইউজারম্যানেজার' এইচটিটিপি সেশন-স্কোপড শিমের 'ইউজারপ্রাইফারেন্সস'-এর একটি রেফারেন্স দিয়ে ইনজেকশন দেওয়া হচ্ছে। এখানে মূল বক্তব্যটি হ'ল 'ইউজারম্যানেজার' বিন একটি সিঙ্গলটন ... এটি প্রতি ধারক হিসাবে ঠিক একবার ইনস্ট্যান্ট করা হবে , এবং এর নির্ভরতা (এক্ষেত্রে শুধুমাত্র একটি, 'ব্যবহারকারীপ্রিফারেন্স' বিন) কেবলমাত্র ইনজেকশন দেওয়া হবে (একবার! )

এর অর্থ হ'ল 'ইউজারম্যানেজার' (ধারণাগতভাবে) কেবল কখনও একই 'ইউজারপ্রাইফারেন্স' অবজেক্টে কাজ করবে, এটিই এটির সাথে প্রাথমিকভাবে ইনজেকশন দেওয়া হয়েছিল।

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

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

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

এজন্য আপনার অনুরোধ-, সেশন- এবং গ্লোবালসেশন-স্কোপড মটরশুটিগুলিকে সহযোগিতা করার উদ্দেশ্যে ইনজেক্ট করার সময় আপনার নিম্নলিখিত, সঠিক এবং সম্পূর্ণ, কনফিগারেশনটি প্রয়োজন:

<bean id="userPreferences" class="com.foo.UserPreferences" scope="session">
    <aop:scoped-proxy/>
</bean>

<bean id="userManager" class="com.foo.UserManager">
    <property name="userPreferences" ref="userPreferences"/>
</bean>

সুতরাং আমি যখন @ স্লোপডপ্রক্সি টিকাটি ব্যবহার করব তখন একটি প্রক্সি স্বয়ংক্রিয়ভাবে ব্যবহার করা হবে, এবং এটি কি সব? স্কোপড প্রক্সির অর্থ -> এই শ্রেণিটি যেমন হয় তেমন ব্যবহার করবেন না, এর জন্য প্রক্সি ব্যবহার করবেন?
Koray Tugay

4
আমি স্প্রিং-ওয়েব ব্যবহার করছি: ৪.৩.৩ এবং দেখে মনে হচ্ছে টীকাটি অন্যদের @ScopedProxyসাথে প্রতিস্থাপন করা @RequestScopeহয়েছে। আপনি এখানে উদাহরণগুলি খুঁজে পেতে পারেন: logicbig.com
স্প্রিং-

4
আমরা যখন বলতে পারি যে স্বরলিপি @Scope(value="session", proxyMode = ScopedProxyMode.TARGET_CLASS)ব্যবহার করা হয়, তখন স্প্রিং এমভিসি স্বীকৃতদের জন্য ওয়েব অ্যাপ্লিকেশন কনটেক্সট ব্যবহার করে না, পরিবর্তে এটি প্রক্সি তৈরির জন্য সিজিএলআইবি ব্যবহার করে ?. উদাহরণ এখানে অন্যান্য ব্যাখ্যা আউট
Kurapika

0

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

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