স্প্রিং কনফিগারেশন ফাইলটিতে শিমের সম্পত্তিকে একটি এনুম মান কীভাবে অর্পণ করা যায়?


109

আমার স্ট্যান্ডএলোন এনাম টাইপ সংজ্ঞায়িত হয়েছে, এরকম কিছু:

package my.pkg.types;

public enum MyEnumType {
    TYPE1,
    TYPE2
}

এখন, আমি সেই ধরণের একটি মান শিমের সম্পত্তিতে ইনজেক্ট করতে চাই:

<bean name="someName" class="my.pkg.classes">
   <property name="type" value="my.pkg.types.MyEnumType.TYPE1" />
</bean>

... এবং এটি কার্যকর হয়নি :(

আমি কীভাবে একটি বসন্তের শিমের মধ্যে একটি এনুম ইনজেকশন করব?

উত্তর:


129

আপনি কি "TYPE1" চেষ্টা করেছেন? আমি মনে করি স্প্রিং যেভাবেই "প্রকার" প্রকারটি নির্ধারণ করতে প্রতিবিম্ব ব্যবহার করে, তাই পুরোপুরি যোগ্য নামটি অপ্রয়োজনীয়। স্প্রিং সাধারণত রিডানডেন্সির সাবস্ক্রাইব করে না!


1
অত্যন্ত আশ্চর্যজনক যে পুরোপুরি যোগ্যতাসম্পন্ন নামটি কাজ করে না।
— রায়ান স্টুল

তবে আমি যদি "$ es tes.db.database: ORACLE}" এর মতো কিছু ব্যবহার করতে চাই, যেমন কোনও সম্পত্তি ডিফল্ট করা। এটি কাজ করতে ব্যর্থ হয়। দয়া করে সহায়তা করুন
— শুভ 224

39

মান বৈশিষ্ট্যের পরিবর্তে মান সন্তানের উপাদানটি ব্যবহার করুন এবং এনাম শ্রেণীর নাম নির্দিষ্ট করুন:

<property name="residence">
    <value type="SocialSecurity$Residence">ALIEN</value>
</property>

স্রেফ লেখার value="ALIEN"ক্ষেত্রে এই পদ্ধতির সুবিধাটি হ'ল এটিও কাজ করে যে স্প্রিং সম্পত্তি থেকে প্রকৃত ধরণের এনাম আবিষ্কার করতে না পারে (যেমন, সম্পত্তিটির ঘোষিত প্রকারটি একটি ইন্টারফেস)। আরাকনিদের মন্তব্য থেকে অভিযোজিত।


6
এটি কাজ করে যদি
— বসন্তটি

@ আরাকনিদ: ভালো কথা। আমি উত্তরে এটি যুক্ত করার স্বাধীনতা গ্রহণ করেছি।
— সলেস্কে

@ সসারিং: আমি কি মূল্য ট্যাগের মধ্যে স্প্রিং ইল ব্যবহার করতে পারি? {{abc:
— ALIEN

32

আমি জানি এটি একটি সত্যই পুরানো প্রশ্ন, তবে কেউ যদি এটির জন্য আরও নতুন উপায় সন্ধান করে তবে বসন্তের ব্যবহারের নামস্থানটি ব্যবহার করুন:

<util:constant static-field="my.pkg.types.MyEnumType.TYPE1" />

বসন্তের ডকুমেন্টেশনে বর্ণিত হিসাবে ।



4

এটি আমার জন্য এটি কী করেছিল বার্তাডেলিভারি কোড হ'ল এনামের শিমের মূল্য PERSISTENT থাকবে:

<bean class="org.springframework.amqp.core.MessageDeliveryMode" factory-method="valueOf">
    <constructor-arg value="PERSISTENT" />
</bean>

4

স্পেল এবং পি-নামস্পেস ব্যবহার করে:

<beans...
xmlns:p="http://www.springframework.org/schema/p" ...>
..
<bean name="someName" class="my.pkg.classes"
    p:type="#{T(my.pkg.types.MyEnumType).TYPE1}"/>

1

নির্দিষ্ট হওয়ার জন্য, নীচের চিত্রের মতো আপনার ক্ষেত্রে এনাম টাইপের ধ্রুবকের নাম হিসাবে মান সেট করুন, যেমন "TYPE1" বা "TYPE2" case এবং এটি কাজ করবে:

<bean name="someName" class="my.pkg.classes">
   <property name="type" value="TYPE1" />
</bean>

0

আপনি যদি আরও মান যুক্ত করতে চান এবং কাস্টম প্রকারগুলিতে লিখতে চান তবে আপনি বিন সম্পাদকগুলি (বিশদটি বসন্তের ডক্সে রয়েছে) লিখতে পারেন।


0

স্প্রিং-সংহতকরণ উদাহরণ, একটি এনুম ফিল্ডের উপর ভিত্তি করে রাউটিং:

public class BookOrder {

    public enum OrderType { DELIVERY, PICKUP } //enum
    public BookOrder(..., OrderType orderType) //orderType
    ...

কনফিগ:

<router expression="payload.orderType" input-channel="processOrder">
    <mapping value="DELIVERY" channel="delivery"/>
    <mapping value="PICKUP" channel="pickup"/>
</router>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.