2013-03-07 2 views
7

私は自分のwebappを一度初期化しようとしています。私はApplicationListenerクラスのためにシングルトンが必要なので、スコープをSingletonに設定しますが、複数のインスタンスを作成しています。このBootStrapperは他のXML設定ファイルでは定義されていません。 デフォルトスコープはシングルトンだが、シングルトンではないので@Scope( "singleton")を追加する必要があった。このアノテーションを使用しても、複数のインスタンスが作成されます。 ここに私のApplicationListenerがあります。@Component @Scope( "singleton")パブリッククラスBootStrapperは、ApplicationListener <ContextStartedEvent>を実装します。

@Component 
@Scope("singleton") 
public class BootStrapper implements ApplicationListener<ContextRefreshedEvent> { 

何か不足していますか?

+1

デフォルトのスコープがシングルトンである – Ralph

+0

あなたの問題は何ですか? "それは動作していません"とは、(名前ではない)問題の有効な説明ではありません! – Ralph

+0

ありがとう、質問を更新しました。 –

答えて

5

Beanの初期化後に呼び出されるコールバックを使用するには、@PostConstructを使用します。

@Component 
public class BootStrapper() { 

    @PostConstruct 
    public void doSomething() { 
      System.out.println("I am initalized!"); 
    } 
} 
+0

おそらくjavax.annotation.PostConstruct(PostCreateではなく) 。また、 "doSomething"メソッドに戻り型を追加する必要があります。 – Fredrik

+0

@Fredrik - あなたが正しい - 私はそれを修正した – Ralph

0

このようにしてみてください。

@Configuration 
public class TestService 
{ 
    private Properties properties; 

    @Bean 
    @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) 
    public Properties getAppProperties() 
    { 
    try 
    { 
     if (properties == null) 
     { 
      properties = ServiceUtils.loadProperties(); 
     } 
    return properties; 
    } 
    catch (Exception e) 
    { 
     LOGGER.logCaughtException("Exception Occured while loading App Properties.", e); 
    } 
    } 
}