Java 在Spring引导应用程序中,我应该将XML bean放在哪里?

Java 在Spring引导应用程序中,我应该将XML bean放在哪里?,java,xml,spring,spring-boot,configuration-files,Java,Xml,Spring,Spring Boot,Configuration Files,我又回到了春天(目前是v4)。现在有了@SpringBootApplication和其他注释,一切都很棒,但是所有文档似乎都忘了提到我是如何用XML定义其他bean的 例如,我想创建一个“SFTP会话工厂”,定义如下: 有一个很好的XML来定义bean,但是我到底应该把它放在哪里,如何链接它呢?之前我做了一个: ApplicationContext context = new ClassPathXmlApplicationContext( "classpath:

我又回到了春天(目前是v4)。现在有了
@SpringBootApplication
和其他注释,一切都很棒,但是所有文档似乎都忘了提到我是如何用XML定义其他bean的

例如,我想创建一个“SFTP会话工厂”,定义如下:

有一个很好的XML来定义bean,但是我到底应该把它放在哪里,如何链接它呢?之前我做了一个:

ApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:applicationContext.xml");
要指定文件名和位置,但现在我正在尝试使用:

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

我应该把XML文件放在哪里?是否有一个神奇的spring名称来命名它?

只要您从一个基本的
@Configuration
类开始,听起来可能像是使用
@SpringBootApplication
,您就可以使用注释来包含XML配置文件

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

您还可以将XML配置转换为Java配置。在您的情况下,它看起来像:

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

您可以使用
@SpringBootApplication
注释将此方法放入类中。

springboot的理想概念是避免使用xml文件。但如果您想保留XMLBean,只需添加
@ImportResource(“classPath:beanFileName.xml”)

我建议删除
spring sftp config.xml
文件。并且,将该文件转换为基于spring注释的bean。所以,创建为bean的任何类。只需在类名前写
@Service
@Component
注释即可。例如:

基于XML的:

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

并且,添加
@ComponentScan(“给出包名”)
。这是最好的方法。

我是否必须将@ImportResource放在我编写的每个spring应用程序和测试用例的顶部,或者spring是否有一个默认名称/位置可以自动查找?@DavidNewcomb您只需要确保可以从配置根目录访问带有注释的配置类。如果您一直在使用它,您甚至可以为它添加自己的自动配置类。@DavidNewcomb您传统上只希望在应用程序中有一个
@SpringBootApplication
,因为它本身是
@Configuration
和其他一些必备功能的组合。你的
@ImportResource
只需要在一个
@Configuration
类上,该类由Spring扫描,就像在XML land中发生的自动扫描一样。你救了我一天。我读到
Spring Boot
最擅长的一件事就是进行“配置”过程简单,可以使用它而不涉及任何配置
xml
,但是
xml
可以通过应用@bvulaj提到的内容加入配置过程。是否可以在不使用任何
xml
的情况下完全配置我的应用程序?问题是“如何链接现有xml文件?”而不是“如何将所有bean转换为注释?”。您的答案与bvulaj的答案相同。如果您是pro annotation vs xml,请添加这是一条~comment~。顺便说一下,不是每个人都同意你的观点#只是说说而已,没什么。避免使用XML并不理想。我在XML上下文文件中有SQL、SAS脚本和字符串bean中的HTML块,利用上下文变量替换功能。添加@ImportResource(“classpath:beanFileName.XML”),而不是@ImportResource(“classpath:beanFileName.XML”)
@Service or @Component
class Employee{
}