2015-07-28 13 views
16

Wracam do wiosny (obecnie v4). Teraz jest cudownie z @SpringBootApplication i innymi adnotacjami, ale cała dokumentacja wydaje się zapominać o tym, jak definiuję inne fasolki w XML!Gdzie umieszczam moje fasole XML w aplikacji Spring Boot?

Na przykład chciałbym utworzyć „SFTP Fabrykę Session”, jak określono w: http://docs.spring.io/spring-integration/reference/html/sftp.html

Jest ładny kawałek XML do definiowania fasoli ale gdzie na ziemi mogę umieścić go i jak zrobić Łączę to? Wcześniej zrobiłem:

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

aby określić nazwę pliku i lokalizację, ale teraz, gdy próbuję użyć:

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

Gdzie mam umieścić plik XML? Czy istnieje nazwa magicznej wiosny, którą można nazwać?

Odpowiedz

23

Dopóki jesteś wyjścia z klasy bazowej @Configuration Zacznijmy od tego, który to może brzmi jak jesteś z @SpringBootApplication, można użyć @ImportResource adnotacji zawierać plik konfiguracyjny XML, jak również.

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

Czy muszę umieścić @ImportResource na górze każdej aplikacji wiosną i przypadkiem testowym, który napisałem, czy jest tam domyślna nazwa/lokalizacja, na którą automatycznie wyskakuje wiosna? –

+0

@DavidNewcomb Trzeba tylko upewnić się, że klasa konfiguracji z adnotacją jest osiągalna z katalogu głównego konfiguracji. Jeśli jest to coś, czego używasz przez cały czas, możesz nawet dodać do niego swoją własną klasę autokonfiguracji. – chrylis

+0

@DavidNewcomb tradycyjnie potrzebujesz tylko jednego '@ SpringBootApplication' w twojej aplikacji, ponieważ jest on kombinacją' @ Configuration' i kilku innych niezbędnych elementów. Twój "@ ImportResource" musi znajdować się tylko na jednej klasie "@ Configuration", która zostanie przeskanowana przez Spring, podobnie jak automatyczne skanowanie, które dzieje się/stało w krainie XML. – bvulaj

2

Możesz także przetłumaczyć konfigurację XML na konfigurację Java. W twoim przypadku to będzie wyglądać:

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

Możesz umieścić tę metodę w klasie z @SpringBootApplication adnotacji.

0

Koncepcja idealnego rozruchu sprężynowego polega na uniknięciu pliku xml. ale jeśli chcesz zachować komponent bean xml, możesz po prostu dodać @ImportResource("classPath:beanFileName.xml").

Polecam usunąć plik spring-sftp-config.xml. I przekonwertuj ten plik na fasolę opartą na adnotacjach wiosennych. Tak więc, niezależnie od tego, jaka klasa została stworzona jako fasola. Po prostu napisz adnotację @Service lub @Component przed nazwą klasy. na przykład:

XML na podstawie:

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

Adnotacja:

@Service or @Component 
class Employee{ 
} 

I dodać @ComponentScan("Give the package name"). To najlepsze podejście.

+0

Pytanie brzmiało "Jak utworzyć łącze w istniejących plikach xml?" a nie "Jak mogę przekonwertować wszystkie moje komponenty bean na adnotacje?". Twoja odpowiedź jest taka sama jak u bvulaj. –

Powiązane problemy