2015-07-28 61 views
16

Sto tornando in primavera (attualmente v4). Adesso è tutto meraviglioso con @SpringBootApplication e le altre annotazioni ma tutta la documentazione sembra dimenticare di menzionare come definisco altri bean in XML!Dove posso inserire i miei bean XML in un'applicazione Spring Boot?

Per esempio mi piacerebbe creare un "SFTP sessione di fabbrica", come definito a: http://docs.spring.io/spring-integration/reference/html/sftp.html

C'è un bel po 'di XML per definire il fagiolo, ma dove diavolo faccio a mettere e come fare Lo collego? In precedenza ho fatto un:

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

per specificare il nome del file e il percorso, ma ora che sto cercando di utilizzare:

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

Dove metto il file XML? Esiste un nome magico per chiamarlo?

risposta

23

Finché si inizia con una classe base @Configuration per iniziare, che suona come se fosse con @SpringBootApplication, è possibile utilizzare l'annotazione @ImportResource per includere anche un file di configurazione XML.

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

Devo mettere @ImportResource in cima ad ogni applicazione di primavera e nel caso di test che scrivo o c'è un nome/posizione di default che compare automaticamente in primavera? –

+0

@DavidNewcomb È sufficiente assicurarsi che una classe di configurazione con l'annotazione sia raggiungibile dalla root di configurazione. Se è qualcosa che usi sempre, potresti anche aggiungere la tua classe di autoconfigurazione per questo. – chrylis

+0

@DavidNewcomb tradizionalmente si desidera solo un '@ SpringBootApplication' nella propria applicazione, in quanto esso stesso è una combinazione di' @ Configuration' e pochi altri must-have. Il tuo '@ ImportResource' deve solo essere su una singola classe' @ Configuration' che viene scansionata da Spring, proprio come l'auto-scanning che accade/è successo in XML land. – bvulaj

2

È anche possibile convertire la configurazione XML in una configurazione Java. Nel tuo caso sarebbe simile:

@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; 
} 

Si può mettere questo metodo nella classe con il @SpringBootApplication annotazione.

0

Il concetto di avvio a molla ideale è evitare il file xml. ma se vuoi mantenere il bean xml, puoi semplicemente aggiungere @ImportResource("classPath:beanFileName.xml").

Si consiglia di rimuovere il file spring-sftp-config.xml. E, converti questo file in bean basato su annotazioni primaverili. Quindi, qualunque classe è stata creata come bean. Basta scrivere l'annotazione @Service o @Component prima del nome della classe. per esempio:

XML based:

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

della nota:

@Service or @Component 
class Employee{ 
} 

E, aggiungere @ComponentScan("Give the package name"). Questo è l'approccio migliore.

+0

La domanda era "Come collego i file xml esistenti?" e non "Come posso convertire tutti i miei fagioli in annotazioni?". La tua risposta è la stessa di bvulaj. –