কেন আমরা বসন্তে স্থির ক্ষেত্রগুলি স্বতঃশক্তি দিতে পারি না?


97

কেন আমরা স্প্রিং শিমের স্ট্যাটিক দৃষ্টান্তের পরিবর্তনশীলটিকে স্বায়িত করতে পারি না। আমি জানি এটি অর্জনের আরও একটি উপায় আছে তবে কেবল আমরা কেন নীচের উপায়ে এটি করতে পারি তা জানতে চাই।

যেমন

@Autowired
public static Test test;

আপনি যে বিকল্প পথটি উল্লেখ করছেন তাতে কি কিছু আলোকপাত করতে পারেন?
সমরাহ

আপনি কনস্ট্রাক্টরের মাধ্যমে অটোয়ার করতে পারেন বা @ পোষ্টকন্সটাক্ট
গাগারওয়া

উত্তর:


70

কারণ স্থির ক্ষেত্র ব্যবহার স্থির পদ্ধতি ব্যবহারে উত্সাহ দেয়। এবং স্থির পদ্ধতিগুলি খারাপ are নির্ভরতা ইনজেকশনটির মূল উদ্দেশ্য হ'ল কনটেইনারটি আপনার জন্য বস্তু তৈরি করতে এবং সেগুলিকে তারযুক্ত করতে দেয়। এছাড়াও এটি পরীক্ষা সহজতর করে তোলে।

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


11
এটির মধ্যে একটি যে সতর্কতার মুখোমুখি হয়েছিল তা হ'ল পরীক্ষার সময়। আপনি যদি @BeforeClassএকটি স্প্রিংজেইউনিট 4 ক্লাসরুনার ব্যবহার করতে চান এবং সেই পদ্ধতিতে @Autowiredপরীক্ষায় মটরশুটি অ্যাক্সেস করতে চান .. আপনি মূলত পারেন না। যা বিরক্তিকর।
জেসন পোলাইটস

4
এই উত্তরটি ব্যাখ্যা দিয়েছে কেন এটা shouldn "টি কিন্তু প্রকৃত উদ্দেশ্য যে, যখন ফ্রেমওয়ার্ক ব্যবহার করে দেখুন একটি শিম মধ্যে স্ট্যাটিক বর্গ টেলিগ্রাম তা এখনো বর্গ লোডার দ্বারা লোড করা হতে
অ্যান্ড্রিয়া টি

51
এই উত্তর সম্পূর্ণ নির্বোধ। বসন্ত আপনার পরীক্ষার কৌশল চাপায় না। উত্তরটি হ'ল স্থির শ্রেণি ক্লাস লোডার দ্বারা তাত্ক্ষণিকভাবে চালিত হলে এখনও স্প্রিং লাইব্রেরি লোড হয় নি।
Andrea T

7
@ AndreaT এর উত্তরটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
চিরাগ অগ্রওয়াল

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

150

কারণ যখন শ্রেণি লোডার স্থির মানগুলি লোড করে, তখন স্প্রিং প্রসঙ্গটি এখনও অগত্যা লোড হয় না। সুতরাং শ্রেণি লোডার শিমের স্ট্যাটিক ক্ষেত্রগুলি সঠিকভাবে ইনজেক্ট করবে না এবং ব্যর্থ হবে।


48
এমন একটি উত্তরের জন্য ধন্যবাদ যা জাভা ভাষার অর্ধেকটি একটি খারাপ ধারণা বলে একটি মতামত উচ্চারণ করার পরিবর্তে প্রকৃতপক্ষে প্রশ্নের উত্তর দেওয়ার জন্য উপস্থিত হয়।
ওয়ারেন শিশির

4
"স্ট্যাটিক ক্লাস"?
অরুণ রাজ

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

মকিতো ক্যান্তি মোক স্থিত পদ্ধতি। স্থির পদ্ধতিগুলি উপহাস করার জন্য আপনার পাওয়ারমক ব্যবহার করতে হবে
জাইসন ভার্গিজ

17

ওওপি ধারণা অনুসারে, স্ট্যাটিক ভেরিয়েবলগুলি স্বতঃশক্ত হয়ে থাকলে এটি খারাপ ডিজাইন হবে।

স্ট্যাটিক ভেরিয়েবল অবজেক্টের সম্পত্তি নয়, তবে এটি কোনও শ্রেণীর সম্পত্তি। স্প্রিং অটো তারের বস্তুগুলিতে করা হয়, এবং এটি আমার মতে নকশাটি পরিষ্কার করে তোলে। আপনি স্বতঃযুক্ত ওয়্যার বিন বিনকে সিঙ্গলটন হিসাবে স্থাপন করতে পারেন এবং স্থির হিসাবে এটি নির্ধারণের মতো অর্জন করতে পারেন।


15

এই সমাধানের মাধ্যমে আপনি বসন্তে স্থির ক্ষেত্রগুলি স্বাবলম্বিত করতে পারেন।

@Component
public class TestClass {

    private static Test test;

    @Autowired
    public void setTest(Test test) {
        TestClass.test = test;
    }
}

4
বাগফিন্ডার অ স্থির পদ্ধতি থেকে স্ট্যাটিক ফিল্ড স্থাপনের বিষয়ে অভিযোগ করবে।
নেফট্যানিক

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