2015-07-28 5 views
16

Ich komme wieder in Spring (derzeit v4). Es ist alles wunderbar jetzt mit @SpringBootApplication und den anderen Anmerkungen, aber die gesamte Dokumentation scheint zu vergessen zu erwähnen, wie ich andere Beans in XML definiere!Wo gebe ich meine XML-Beans in eine Spring Boot-Anwendung ein?

Zum Beispiel würde Ich mag eine „SFTP Session Factory“ erstellen, wie definiert unter: http://docs.spring.io/spring-integration/reference/html/sftp.html

Es ist ein schönes Stück von XML die Bohne zu definieren, aber wo auf der Erde kann ich es ausdrückte und wie tun Ich verbinde es? Früher habe ich ein:

ApplicationContext context = new ClassPathXmlApplicationContext(
       "classpath:applicationContext.xml"); 

den Dateinamen und den Speicherort angeben, aber jetzt, wo ich zu verwenden bin versucht:

ApplicationContext ctx = SpringApplication.run(Application.class); 

Wo ich die XML-Datei setzen Sie? Gibt es einen magischen Frühlingsnamen, um es zu nennen?

Antwort

23

Solange Sie mit einer Basis @Configuration Klasse fangen zu beginnen, was es vielleicht klingt wie Sie mit @SpringBootApplication sind, können Sie die @ImportResource Anmerkung verwenden, um eine XML-Konfigurationsdatei als auch aufzunehmen.

@SpringBootApplication 
@ImportResource("classpath:spring-sftp-config.xml") 
public class SpringConfiguration { 
    // 
} 
+0

Muss ich @ImportResource auf jede Federanwendung und jeden Testfall, den ich schreibe, setzen oder gibt es einen Standardnamen/-ort, in den der Frühling automatisch hineinschaut? –

+0

@DavidNewcomb Sie müssen nur sicherstellen, dass eine Konfigurationsklasse mit der Annotation von Ihrem Konfigurationsstammverzeichnis aus erreichbar ist. Wenn Sie etwas ständig verwenden, können Sie sogar Ihre eigene Autokonfigurationsklasse hinzufügen. – chrylis

+0

@DavidNewcomb Sie wollen traditionell nur eine '@ SpringBootApplication' in Ihrer Anwendung, da sie selbst eine Kombination aus' @ Configuration' und einigen anderen Must-Haves ist. Ihre '@ ImportResource' muss nur in einer einzigen' @Configuration' Klasse sein, die von Spring gescannt wird, genauso wie die automatische Suche, die in XML Land passiert. – bvulaj

2

Sie können die XML-Konfiguration auch in eine Java-Konfiguration übersetzen. In Ihrem Fall wäre es wie folgt aussehen:

@Bean 
public DefaultSftpSessionFactory sftpSessionFactory() { 
    DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(); 
    factory.setHost("localhost"); 
    factory.setPrivateKey(new ClassPathResource("classpath:META-INF/keys/sftpTest")); 
    factory.setPrivateKeyPassphrase("springIntegration"); 
    factory.setPort(22); 
    factory.setUser("kermit"); 
    return factory; 
} 

Sie diese Methode mit der @SpringBootApplication Annotation in der Klasse setzen.

0

Spring Boot ideale Konzept ist vermeiden XML-Datei. Wenn Sie jedoch xml-Bean behalten möchten, können Sie einfach @ImportResource("classPath:beanFileName.xml") hinzufügen.

Ich würde empfehlen, die spring-sftp-config.xml Datei zu entfernen. Und wandeln Sie diese Datei in Spring Annotation-basierte Bean um. Also, welche Klasse auch immer als Bean erstellt wurde. Schreiben Sie einfach @Service oder @Component Annotation vor dem Klassennamen. zum Beispiel:

XML-basierte:

<bean ID="id name" class="com.example.Employee"> 

Annotation:

@Service or @Component 
class Employee{ 
} 

Und, fügen @ComponentScan("Give the package name"). Dies ist der beste Ansatz.

+0

Die Frage lautete: "Wie verknüpfe ich vorhandene XML-Dateien?" und nicht "Wie konvertiere ich alle meine Beans in Anmerkungen?". Ihre Antwort ist die gleiche wie bei Bvulaj. –

Verwandte Themen