web-dev-qa-db-ja.com

Spring BootアプリケーションのXML Beanはどこに配置しますか?

Spring(現在はv4)に戻ります。 @SpringBootApplicationと他のアノテーションで今ではすべてが素晴らしいですが、すべてのドキュメントはXMLで他のBeanをどのように定義するかについて言及するのを忘れているようです!

たとえば、次の場所で定義されている「SFTP Session Factory」を作成したいと思います。 http://docs.spring.io/spring-integration/reference/html/sftp.html

Beanを定義するXMLが少しありますが、一体どこに配置し、どのようにリンクするのですか?以前に私がやったこと:

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

ファイル名と場所を指定しますが、今私は使用しようとしています:

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

XMLファイルはどこに配置しますか?それを呼ぶ魔法の泉の名前はありますか?

27
David Newcomb

@Configurationのように聞こえるかもしれませんが、ベースの@SpringBootApplicationクラスで開始している限り、 @ImportResource を使用できます。 XML構成ファイルも含めるアノテーション。

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

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アノテーションを使用して、このメソッドをクラスに配置できます。

3
dunni

スプリングブートの理想的な概念は、xmlファイルを避けることです。ただし、XML Beanを保持する場合は、@ImportResource("classPath:beanFileName.xml")を追加するだけです。

_spring-sftp-config.xml_ファイルを削除することをお勧めします。そして、このファイルをSpringアノテーションベースのBeanに変換します。したがって、Beanとして作成されたクラスは何でも。クラス名の前に_@Service_または_@Component_注釈を書くだけです。例えば:

XMLベース:

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

注釈:

_@Service or @Component
class Employee{
}
_

そして、@ComponentScan("Give the package name")を追加します。これが最善のアプローチです。

1
Md Jalal