আমি কি @ ইজেবি বা @ ইনজেক্ট ব্যবহার করব?


148

আমি এই প্রশ্নটি পেয়েছি: @ ইনজেক্ট এবং @ ইজেবি-র মধ্যে পার্থক্য কী তবে আমি কোনও বুদ্ধিমান পাইনি। আমি এর আগে জাভা ইই করিনি বা নির্ভরতা ইনজেকশনের অভিজ্ঞতাও আমার নেই তাই আমার কী ব্যবহার করা উচিত তা বুঝতে পারি না?

@ ইজেবি কি ইঞ্জেকশন দেওয়ার একটি পুরানো উপায়? @ ইনজেক্টটি নতুন সিডিআই ফ্রেমওয়ার্ক ব্যবহার করার সময় এই টীকাটি ব্যবহার করার সময় কি ইজিজি কনটেইনার দ্বারা সম্পন্ন হয়? এটাই কি তফাত এবং যদি আমার কেসটি হয় তবে আমি @ ইজেবি এর পরিবর্তে @ ইনজেক্ট ব্যবহার করব?

উত্তর:


178

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

সাধারণ ক্ষেত্রে আপনি কেবল পরিবর্তন @EJBকরতে পারেন @Inject। আরো উন্নত মামলা (যেমন যখন আপনি প্রচন্ডভাবে উপর নির্ভর করে সালে @EJB'র বৈশিষ্ট্যাবলী পছন্দ beanName, lookupবা beanInterface) অর্ডার ব্যবহার করতে চেয়ে @Injectআপনি একটি সংজ্ঞায়িত করতে হবে @Producerক্ষেত্র বা পদ্ধতি।

এই সংস্থানগুলি মধ্যে পার্থক্য বুঝতে সহায়ক হতে পারে @EJBএবং @Producesএবং কিভাবে তাদের শ্রেষ্ঠ পেতে:

অ্যান্টোনিও গনক্যাল্ভেসের ব্লগ:
সিডিআই পার্ট I
সিডিআই পার্ট II
সিডিআই পার্ট III

জেবস ওয়েল্ড ডকুমেন্টেশন:
সিডিআই এবং জাভা ইই বাস্তুতন্ত্র

স্ট্যাকওভারফ্লো:
শর্তের ভিত্তিতে @EJB শিম ইনজেকশন করুন


4
@EJBবিজ্ঞপ্তি ইঞ্জেকশনের জন্য কেন কাজ করে (একটি সিঙ্গলটন শিম এবং অন্য শিমের একে অপরের রেফারেন্সের প্রয়োজন)? (নীচে আমার উত্তরের রেফারেন্স সহ - আমি স্যুইচ করে সঠিক কাজটি করছি কিনা তা নিশ্চিত নই @EJB)
এনক্রোম্যান্সার

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

33

@Injectযে কোনও শিম ইনজেকশন করতে পারে, যখন @EJBকেবল ইজেবি ইনজেক্ট করতে পারে। আপনি ইজেবি ইনজেকশন করতে হয় ব্যবহার করতে পারেন, তবে আমি @Injectসর্বত্র পছন্দ করব ।


1
আমরা যখন ইনজেক্টটি ব্যবহার করি তখন ইঞ্জেকশনটি ঠিক কী করে? জাভা ই পাত্রে? এটি কি পোজোর ইঞ্জেকশন করতে পারে?
Koray Tugay

3
সিডিআই সহ এটি সিডিআই কনটেইনার (জাভাEE ধারক মধ্যে বান্ডিল)
বোহো

16

আপডেট: এই উত্তরটি ভুল বা পুরানো হতে পারে। বিস্তারিত জানার জন্য মন্তব্য দেখুন।

আমি থেকে সুইচ @Injectকরার @EJBকারণ @EJBযেহেতু বৃত্তাকার ইনজেকশন দেয় @Injectএটিতে pukes।

বিশদ: আমার @PostConstructকোনও @Asynchronousপদ্ধতিতে কল করার দরকার ছিল তবে এটি সিঙ্ক্রোনালিভাবে এটি করবে। অ্যাসিঙ্ক্রোনাস কল করার একমাত্র উপায় ছিল মূল কলটি অন্য শিমের একটি পদ্ধতি ছিল এবং এটি মূল বিনের পদ্ধতিটি কল করে। এটি করার জন্য প্রতিটি শিমের জন্য অন্যের সাথে একটি রেফারেন্স প্রয়োজন - এটি বিজ্ঞপ্তি। কাজ করার @Injectজন্য এই কাজের জন্য ব্যর্থ @EJB


@ মার্তিজনবার্গার আমার কাছে কোডটি হাতে নেই, বা জাভা ইই পরিবেশের হাতে নেই। @Injectএকে অপরের পাবলিক ফিল্ডগুলিতে কেবল 2 টি জাভা ক্লাস এবং সেগুলি তৈরি করুন। যদি এটি কাজ করে তবে আমার উত্তরটি ভুল। যদি এটি কাজ না করে, তবে আমার উত্তরটি এখনও পর্যন্ত সঠিক। পরবর্তী পরিবর্তনে @Injectকরতে @EJB(এবং সম্ভবত ক্লাস নিজেদের টীকা? আমি ভুলে।)। তারপরে চক্রীয় মিউচুয়াল ইনজেকশনটি ভাল কাজ করা উচিত। এটা কেন আমি থেকে সুইচ এর @Injectজন্য @EJB। আশা করি এটি উপলব্ধিযোগ্য।
নেক্রোমেন্সার

আমি দুটি পোজো তৈরি করেছি এবং পোজোর একে অপরকে ইনজেকশন দিয়েছি। আমার কনফিগারেশনে সমস্যা ছাড়াই কাজ করে (ওয়াইল্ডফ্লাই 8.2 = সিডিআই 1.2)
মার্টিজন বার্গার

1
ধন্যবাদ @ মার্তিজনবার্গার, আমি এটি নিশ্চিত করব এবং এর মধ্যে আমার উত্তরে সতর্কতার সাথে একটি নোট যুক্ত করব।
নেক্রোমেন্সার

আপনি কী অর্জন করতে চেয়েছিলেন তা সঠিকভাবে নিশ্চিত নয়, তবে এটি সম্ভবত আপনি যা চেয়েছিলেন ঠিক তেমনটি করে এবং একটি বিজ্ঞপ্তি নির্ভরতা ছাড়াই। tomee.apache.org/example-trunk/async-postconstruct/README.html । এছাড়াও অ্যাসিঙ্ক্রোনাস সিডিআই ইভেন্টগুলি যেতে যাওয়ার একটি ক্লিনারের উপায় হতে পারে (প্রয়োজনীয়তার উপর নির্ভর করে)।
জানুয়ারী

12

এখানে বিষয় সম্পর্কে একটি ভাল আলোচনা করা হয়েছে। গ্যাভিন কিং কিংডম রিমোট ইজেবিগুলির জন্য @ ইনজেক্ট @ ইজেবি-র উপরে প্রস্তাব দিচ্ছেন।

http://www.seamframework.org/107780.lace

অথবা

https://web.archive.org/web/20140812065624/http://www.seamframework.org/107780.lace

উত্তর: @ ইজেবি বা @ ইনজেক্টের সাথে ইনজেকশন?

  1. নভেম্বর 2009, 20:48 আমেরিকা / নিউ_ইয়র্ক | লিভ গ্যাভিন কিং

এই ত্রুটিটি খুব আশ্চর্যজনক, যেহেতু ইজেবি স্থানীয় উল্লেখগুলি সর্বদা সিরিয়ালযোগ্য হওয়া উচিত able গ্লাস ফিশে বাগ, সম্ভবত?

মূলত, @ ইনজেক্ট সবসময়ই ভাল, যেহেতু:

it is more typesafe,
it supports @Alternatives, and
it is aware of the scope of the injected object.

আমি রিমোট ইজেবি সম্পর্কিত রেফারেন্সগুলি বাদ দিয়ে @ ইজেবি ব্যবহারের বিরুদ্ধে সুপারিশ করছি।

এবং

উত্তর: @ ইজেবি বা @ ইনজেক্টের সাথে ইনজেকশন?

  1. নভেম্বর 2009, 17:42 আমেরিকা / নিউ_ইয়র্ক | লিভ গ্যাভিন কিং

    এটির অর্থ কি দূরবর্তী ইজেবিগুলির সাথে আরও ভাল @ ইজেবি?

একটি রিমোট ইজেবির জন্য, আমরা শিমের ক্লাসে কোয়ালিফায়ার, @ বিকল্প ইত্যাদি ইত্যাদির মতো মেটাডেটা ঘোষণা করতে পারি না, যেহেতু ক্লায়েন্টটি কেবল সেই মেটাডেটা অ্যাক্সেস করতে পারে না। তদুপরি, কিছু অতিরিক্ত মেটাডেটা অবশ্যই নির্দিষ্ট করতে হবে যে আমাদের লোকাল কেসের (গ্লোবাল জেএনডিআই নাম যাই হোক না কেন) দরকার নেই। সুতরাং যে সমস্ত জিনিস অন্য কোথাও যেতে হবে: যথা @ ঘোষণা ঘোষণা।


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


4

@ ইজেবি এবং @ ইনজেক্ট ব্যবহার করার সময় সেশন বিন আইডেন্টিটির মেয়াদের পার্থক্যটি বোঝাও কার্যকর হতে পারে। স্পেসিফিকেশন অনুসারে নিম্নলিখিত কোডটি সর্বদা থাকবে true:

@EJB Cart cart1;
@EJB Cart cart2;
 if (cart1.equals(cart2)) { // this test must return true ...}

@ ইজেবি এর পরিবর্তে @ ইনজেক্ট ব্যবহার করা একই রকম হয় না।

আরো দেখুন আড়ম্বরহীন অধিবেশন মটরশুটি পরিচয় আরও তথ্যের জন্য


0

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

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