Spring 3.0 Fragen

Peregrin

Mitglied
Hallo zusammen,

ich versuche mich momentan in Spring 3 einzuarbeiten und habe mal nen paar Fragen :).

Bei mir sind keine vorkenntnisse zu Spring zu erwarten, also bitte für dummies erklären ;)

  • @Value - Ich kann mit @Value Variablen füllen aus Properties oder anderen Beans. Hab jetzt im Netz so einige Bsp. dazu gefunden. Nur ab und zu benutzen die Beispiele die # und ab und zu das $ zeichen. Wann muss ich denn was benutzen ?
  • Sollte man besser @Inject oder @Autowired benutzen
  • Soll man @Autowired(required) oder doch lieber die Annotation @Required benutzen
  • In der reference Doku wird gesagt:
Only one annotated constructor per-class can be marked as required, but multiple non-required constructors can be annotated. In that case, each is considered among the candidates and Spring uses the greediest constructor whose dependencies can be satisfied, that is the constructor that has the largest number of arguments.

Also kann man das required Attribut nicht bei Konstruktoren verwenden oder habe ich das falsch verstanden.
Ich glaube da kommen bald noch mehr Fragen, aber mehr fallen mir momentan nicht ein. :)

Vielen Dank schonmal
 
Zuletzt bearbeitet:
Hallo,

@Value - Ich kann mit @Value Variablen füllen aus Properties oder anderen Beans. Hab jetzt im Netz so einige Bsp. dazu gefunden. Nur ab und zu benutzen die Beispiele die # und ab und zu das $ zeichen. Wann muss ich denn was benutzen ?
Mit $ kannst du mit dem Property-Placeholder (http://static.springsource.org/spri...eans.html#beans-factory-placeholderconfigurer) Mechanismus auf Werte aus Properties Dateien zugreifen und Ausdrücke mit # verwenden die neue (alte... in Spring .Net gibts die schon ewig...) SpEL (Spring Expression Language) . Damit kannst du Werte mit komplexeren Ausdrücken initialisieren.

Sollte man besser @Inject oder @Autowired benutzen
@Inject wird / ist Standard, also würde ich das verwenden
Siehe auch:
http://www.heise.de/developer/artikel/Dependency-Injection-817926.html
http://atinject.googlecode.com/svn/trunk/javadoc/javax/inject/package-summary.html
http://blogs.sun.com/enterprisetechtips/entry/using_cdi_and_dependency_injection

Soll man @Autowired(required) oder doch lieber die Annotation @Required benutzen

In der Doku zu @Inject:
Injection of members annotated with @Inject is required.

Sprich diese Dependencies sind immer Required... es sei denn sie sind mit @Inject(optional=true) markiert.

Gruß Tom
 
Hallo,

zu dem @Value habe ich auch eine Frage. Hab schon mit verschiedenen Variationen rumprobiert, bin jedoch zu keine Lösung gekommne.

Ist es irgendwie möglich auch mehrere Elemente als Array auszulesen?

Also z.B. möchte ich die Werte
meineWerte.wert1=213
meineWerte.wert2=true
meineWerte.wert3=true

als ein Array von 3 Werten (Object[] meineWerte erhalten.

Ist dies irgendwie möglich?

Besten Dank schonmal
 
Hallo,

schau mal hier:

Java:
package de.tutorials;

import java.util.Arrays;

import org.springframework.beans.factory.annotation.Value;

public class ValueExampleObject {
    @Value("#{someValues}")
    public Object[] value;
    
    public String toString() {
        return Arrays.toString(value);
    }
}

Java:
package de.tutorials;

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

public class SpringInjectionExample {

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

}

Config:
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:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"
		xmlns:util="http://www.springframework.org/schema/util"
		xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee"
		xmlns:tx="http://www.springframework.org/schema/tx"
		xsi:schemaLocation="
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
			http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
			http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

	<bean id="ValueExampleObject" class="de.tutorials.ValueExampleObject"/>
	
	<util:list id="someValues">
		<value>#{213}</value>
		<value>#{true}</value>
		<value>#{true}</value>
	</util:list>
	
	<context:annotation-config/>
</beans>

Ausgabe:
Code:
12.01.2010 23:46:04 org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@43256ea2: startup date [Tue Jan 12 23:46:04 CET 2010]; root of context hierarchy
12.01.2010 23:46:04 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from file [/home/tom/Desktop/workspaces/3.6M3SDK/de.tutorials.training/conf/context.xml]
12.01.2010 23:46:05 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@39e57e8f: defining beans [ValueExampleObject,someValues,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor]; root of factory hierarchy
[213, true, true]

Gruß Tom
 
Zuletzt bearbeitet von einem Moderator:
erstmal danke für deine Antworten

jetzt ein neuer Punkt:

Ich möchte gerne mittels den WebMVC ein XML entgegen nehmen und als Rückantwort auch eine XML senden. Wieso MVC ? Mir hat der Aufbau gut gefallen http://cfs1.tistory.com/upload_cont...AZnMxLnRpc3RvcnkuY29tOi9hdHRhY2gvMC80OS5ibXA=
Allerdings würde es bei mir keine View geben, sondern nur einen Hauptcontroller der die XML entgegen nimmt und dann an einen weiteren Controller zur Verarbeitung delegiert.

Wie man einen String sendet habe ich schon hinbekommen, allerdings noch nicht wie ich ein XML sende
 

Neue Beiträge

Zurück