2013-03-07 17 views
7

Web günlüğümün bir kez başlatılmasını deniyorum. ApplicationListener sınıfı için singleton'a ihtiyacım var, bu yüzden kapsamı Singleton'a ayarlıyorum, ancak birden çok örnek oluşturuyor. Bu BootStrapper başka bir xml yapılandırma dosyasında tanımlanmamıştır. Varsayılan kapsamın singleton olduğunu biliyorum, ancak bir singleton olmadığı için @Scope ("singleton") eklemesi gerekiyordu. Bu açıklamada bile, hala birden çok örnek oluşturur. İşte benim ApplicationListener'ım.@Component @Scope ("singleton") genel sınıfı BootStrapper uygulaması ApplicationListener <ContextStartedEvent> {

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

Hiçbir şey eksik miyim?

+1

varsayılan kapsamı tekil olan – Ralph

+0

senin sorunun ne? "ama çalışmıyor" herhangi bir (adlandırılmamış) sorununun geçerli bir açıklaması değil! – Ralph

+0

Teşekkürler, soru güncellendi. –

cevap

5

Fasulye başlatıldıktan sonra çağrılan geri arama için @PostConstruct kullanın.

@Component 
public class BootStrapper() { 

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

Büyük olasılıkla javax.annotation.PostConstruct (PostCreate değil) . Ayrıca, "doSomething" yöntemine bir dönüş tipi eklenmelidir. – Fredrik

+0

@Fredrik - haklısın - düzeltdim – Ralph

0

böyle deneyin:

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