Spring: Bean definition mit Enum als Klasse?

DarthShader

Erfahrenes Mitglied
Hallo,

ich setze eine Property einer Bean auf diese Weise, um ihm ein Enum mitzugeben:

XML:
<property name="objectOne.enumObject">
	<util:constant static-field="de.test.klassen.Klasse$MeinEnum.Eins" />
</property>

Damit setze ich das Property "enumObject" der Instanz "objectOne" auf den Enum "MeinEnum.Eins".

Meine Frage wäre nun, kann ich solch eine Enum Referenz (also das <util:constant ... />) auch selbst als Bean definieren? Was ich erreichen will, ist quasi das hier:

XML:
<bean id="enum">
	<util:constant static-field="de.test.klassen.Klasse$MeinEnum.Eins" />
</bean>

Damt ich es dann später so einsetzen kann:

XML:
<property name="objectOne.enumObject" ref="enum" />

Ich weiß, dass die vorletzte XML Defintion syntaktisch falsch ist, kann mir jemand sagen, wie es richtig geht, oder ob es überhaupt geht?


Vielen Dank für Eure Hilfe!
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

was willst du denn damit machen? Reicht dir nicht diese Möglichkeit:
(ENUM Konstante beim value-Attribute des entsprechenden Properties direkt angeben)

Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author Thomas.Darimont
 *
 */
public enum Enum {
    A(0),B(1),C(2);
    
    int value;

    private Enum(int value) {
        this.value = value;
    }
    
    public int getValue() {
        return value;
    }

    @Override
    public String toString() {
        return super.toString() + " value: " + value;
    }
}

Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author Thomas.Darimont
 *
 */
public class Test {
    Enum property;

    public Enum getProperty() {
        return property;
    }

    public void setProperty(Enum property) {
        this.property = property;
    }
    
    @Override
    public String toString() {
        return super.toString() +" " + this.property;
    }
}

XML:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:aop="http://www.springframework.org/schema/aop"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

    <bean id="test" class="de.tutorials.Test">
        <property name="property" value="B"/>
    </bean>
</beans>

Java:
/**
 * 
 */
package de.tutorials;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/**
 * @author Thomas.Darimont
 *
 */
public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        ApplicationContext context = new FileSystemXmlApplicationContext("conf/context.xml");
        System.out.println(context.getBean("test"));
    }

}

Ausgabe:
Code:
de.tutorials.Test@6025e7 B value: 1

Gruß Tom
 
Zuletzt bearbeitet von einem Moderator:
Hallo Thomas,

vielen Dank für die ausführliche Antwort. Leider kann ich mit dieser Typisierung nicht dienen. Ich will das Enum einem Objekt injizieren, dessen Property den Typ "Object" hat, und nicht "Enum".

Deshalb auch das Konstrukt mit dem "<util:constant static-field".

Da diese Zeile aber so lang ist, und ich viele gleiche Enums vielen anderen Objekten injiziere, hatte ich gedacht, man könne den Enum einmal als BEan definieren, und dann den anderen als "ref" übergeben. Das spart eine Menge an XML-Boilerplate-Code.
 

Neue Beiträge

Zurück