web-dev-qa-db-fra.com

Où dois-je placer mes beans XML dans une application Spring Boot?

Je reviens au printemps (actuellement v4). Tout est merveilleux maintenant avec @SpringBootApplication et les autres annotations, mais toute la documentation semble oublier de mentionner comment je définis les autres beans en XML!

Par exemple, j'aimerais créer une "fabrique de sessions SFTP" comme défini dans: http://docs.spring.io/spring-integration/reference/html/sftp.html

Il y a un joli morceau de XML pour définir le bean, mais où puis-je le mettre et comment le lier? Auparavant, j'ai fait un:

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

pour spécifier le nom du fichier et l'emplacement, mais maintenant que j'essaie d'utiliser:

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

Où dois-je placer le fichier XML? Y a-t-il un nom de ressort magique pour l'appeler?

26
David Newcomb

Tant que vous commencez par une classe @Configuration de base, qui ressemble peut-être à @SpringBootApplication, vous pouvez également utiliser l'annotation @ImportResource pour inclure un fichier de configuration XML.

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

Vous pouvez également traduire la configuration XML en une configuration Java. Dans votre cas, cela ressemblerait à:

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

Vous pouvez mettre cette méthode dans la classe avec l'annotation @SpringBootApplication.

3
dunni

Le concept idéal pour le démarrage de printemps est d'éviter les fichiers XML. mais si vous voulez conserver xml bean, vous pouvez simplement ajouter @ImportResource("classPath:beanFileName.xml").

Je recommanderais de supprimer le fichier spring-sftp-config.xml. Et convertissez ce fichier en bean basé sur des annotations de printemps. Donc, quelle que soit la classe qui a été créée en tant que haricot. Il suffit d'écrire l'annotation @Service ou @Component avant le nom de la classe. par exemple:

Basé sur XML:

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

Annotation:

@Service or @Component
class Employee{
}

Et ajoutez @ComponentScan("Give the package name"). C'est la meilleure approche.

0
Md Jalal