web-dev-qa-db-ja.com

SpringApplication使用時にapplicationcontext.xmlをロードする

ApplicationContext.xmlファイルをロードするSpringApplicationの例を誰かが提供できますか?

Springの例 (Gradleベース)を使用して、GWTRPCアプリケーションをRESTfulWebサービスに移動しようとしています。 applicationContext.xmlがありますが、SpringApplicationにロードさせる方法がわかりません。を介して手動でロード

ApplicationContext context = new ClassPathXmlApplicationContext(args);

結果は空のコンテキストになります。 ...そしてそれがうまくいったとしても、それはから返されたものとは別のものになるでしょう

SpringApplication.run(Application.class, args);

または、SpringApplication.runによって作成されたアプリコンテキストに外部Beanを取り込む方法はありますか?

7
Raster

クラスパスのファイルを使用する場合は、いつでも次のように実行できます。

@SpringBootApplication
@ImportResource("classpath:applicationContext.xml")
public class ExampleApplication {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(ExampleApplication.class, args);
    }
}

@ImportResourceアノテーションのclasspath文字列に注意してください。

12
Tomasz Dzieniak

@ImportResourceを使用して、XML構成ファイルをSpringBootアプリケーションにインポートできます。例えば:

@SpringBootApplication
@ImportResource("applicationContext.xml")
public class ExampleApplication {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(ExampleApplication.class, args);
    }

}
8
Andy Wilkinson

アノテーションは、(クラス上で)(mainメソッドを持っている)それ(以下の呼び出しを持っている)である必要はありません:

SpringApplication.run(Application.class、args);

(あなたの場合、私が言っているのは、@ ImportResourceがクラスにある必要はないということです)

パブリッククラスExampleApplication {}

.........

あなたは別のクラスを持つことができます

@Configuration
@ImportResource({"classpath*:applicationContext.xml"})
public class XmlConfiguration {
}

または明確にするために

@Configuration
@ImportResource({"classpath*:applicationContext.xml"})
public class MyWhateverClassToProveTheImportResourceAnnotationCanBeElsewhere {
}

上記はこの記事で言及されています

http://www.springboottutorial.com/spring-boot-Java-xml-context-configuration

.........

ボーナス:

そして、「SpringApplication.run」が無効なメソッドだと思ったかもしれない場合に備えて.....そうではありません。

これを行うこともできます:

public static void main(String[] args) {

        org.springframework.context.ConfigurableApplicationContext applicationContext = SpringApplication.run(ExampleApplication.class, args);

        String[] beanNames = applicationContext.getBeanDefinitionNames();
        Arrays.sort(beanNames);

        for (String name : beanNames) {
            System.out.println(name);
        }

これはまた、多くの、多くの、多くのすべてに微妙にあなたを手がかりにします(私は「多く」について言及しましたか?)...春のブーツがもたらす依存関係。あなたが話す人によっては、これは良いことです(他の誰かすべてのニースが私のために理解した)または邪悪なこと(おっと、それは私が制御できない多くの依存関係です)。

ハッシュタグ:時々LookBehindTheCurtain

0
granadaCoder