কীভাবে @ ভ্যালুকে alচ্ছিক হিসাবে সংজ্ঞায়িত করবেন


119

আমার একটি বসন্ত শিমের মধ্যে নিম্নলিখিত রয়েছে:

@Value("${myValue}")
private String value;

মানটি সঠিকভাবে ইনজেকশন করা হয়। যাইহোক, ভেরিয়েবলটি alচ্ছিক হওয়া দরকার, এটি একটি কমান্ড লাইন প্যারামিটার হিসাবে পাস করা হয় (যা পরে সিম্পারকম্যান্ডলাইনপ্রোপার্টিসোর্স ব্যবহার করে বসন্ত প্রসঙ্গে যুক্ত করা হয় ) এবং এই যুক্তিটি সর্বদা বিদ্যমান থাকবে না।

আমি একটি ডিফল্ট মান প্রদানের জন্য নিম্নলিখিত উভয়টি চেষ্টা করেছি:

@Value("${myValue:}")
@Value("${myValue:DEFAULT}")

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

@ ভ্যালু প্রয়োজন নেই তা নির্দিষ্ট করার সঠিক উপায় কী ?

ধন্যবাদ


এটি খুব আশ্চর্যজনক ... ডিফল্ট মানটি কেবলমাত্র ডিফল্ট মান হিসাবে কাজ করে (যেমন সম্পত্তি সংজ্ঞায়িত না হয়)। আপনি কী আপনার বিবৃতিটি "সত্যিকারের মান থাকা সত্ত্বেও ডিফল্ট মানটি ইনজেকশনের" ডাবল পরীক্ষা করতে পারেন (উদাহরণস্বরূপ যদি কোনও পুরানো সংকলিত শ্রেণি নেই)?
পাভেল হোরাল

7
@Value("${some.prop:}")আমার জন্য কাজ করে। এই পরিবর্তনশীল একমাত্র টিকা।
জারাথুস্ট্র

আপনি কি আপনার অ্যাপ্লিকেশন কনফিগারেশন পোস্ট করতে পারেন?
ভ্লাদিমির ওয়াগাইতসেভ

@ প্রমাণিত (প্রয়োজনীয় = মিথ্যা)?
অ্যান্ড্রু স্কট ইভান্স

উত্তর:


179

@ ভ্যালু প্রয়োজন নেই তা নির্দিষ্ট করার সঠিক উপায় কী?

এই ধারণাটি নিয়ে কাজ করা যে 'প্রয়োজন নেই' এর অর্থ আপনার nullতখন ...

আপনি সঠিকভাবে উল্লেখ করেছেন যে আপনি একটি :অক্ষরের ডানদিকে একটি ডিফল্ট মান সরবরাহ করতে পারেন । আপনার উদাহরণ ছিল @Value("${myValue:DEFAULT}")

আপনি ডিফল্ট মান হিসাবে প্লেইন স্ট্রিংয়ের মধ্যে সীমাবদ্ধ নন। আপনি স্পেল এক্সপ্রেশন ব্যবহার করতে পারেন , এবং ফিরে আসার nullজন্য একটি সাধারণ স্পেল এক্সপ্রেশন :

@Value("${myValue:#{null}}")

49

আপনি যদি জাভা 8 ব্যবহার করে থাকেন তবে আপনি এর java.util.Optionalক্লাসের সুবিধা নিতে পারেন । আপনাকে কেবল এইভাবে নিম্নলিখিত পরিবর্তনগুলি ঘোষণা করতে হবে:

@Value("${myValue:#{null}}")
private Optional<String> value;

তারপরে, আপনি মূল্য নির্ধারণ করা হয়েছে কিনা খুব ভাল পদ্ধতিতে পরীক্ষা করতে পারেন:

if (value.isPresent()) {
    // do something cool
}

আশা করি এটা সাহায্য করবে!


4
ইন্টেলিজ আইডিয়া অনুযায়ী। Optionalশ্রেণীর ক্ষেত্রে প্রকারের ব্যবহার করা এটি সেরা অনুশীলন নয় ।
Fırat KÜÇÜK

2
আপনি এটি করেন এবং এটি একটি এনপিই নিক্ষেপ করে। valueনাল
আজকের

1
@ অ্যাটাক দেখে মনে হচ্ছে আপনার বর্ণিত সমস্যাটি কমপক্ষে ৪.৩.১৩ থেকে স্থির হয়েছে। বর্ণিত ঘোষণাটি ব্যবহার করে আমার কোনও অসুবিধা হবে না। : যদিও এটি শুধু একটি nullable মান ব্যবহার ভালো blog.joda.org/2015/08/...
Torben

2
"ইন্টিলিজের ধারণা অনুযায়ী শ্রেণীর ক্ষেত্রে ptionচ্ছিক ধরনের ব্যবহার করা সেরা অভ্যাস নয়।" instanceচ্ছিক উদাহরণ পরিবর্তনশীল হিসাবে ব্যবহার সম্পর্কে ভুল কি? গিটারগুলিতে ব্যবহারের তুলনায় কেবল যে তুলনামূলকভাবে দীর্ঘস্থায়ী ... এবং এই জাতীয় ক্ষেত্রটি সিরিয়ালকরণের জন্য ক্ষণস্থায়ী হিসাবে চিহ্নিত করা উচিত?
আন্দ্রে এম।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.