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


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.