9

我正在尝试对我的 webapp 进行一次初始化。我需要 ApplicationListener 类的单例,所以我将范围设置为单例,但它正在创建多个实例。此 BootStrapper 未在任何其他 xml 配置文件中定义。我知道默认范围是单例,但必须添加 @Scope("singleton") 因为它不是单例。即使有这个注释,它仍然会创建多个实例。这是我的应用程序监听器。

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

我错过了什么吗?

4

2 回答 2

5

要在 bean 初始化后调用回调,请使用@PostConstruct.

@Component
public class BootStrapper() {

     @PostConstruct
     public void doSomething() {
          System.out.println("I am initalized!");
     }
}
于 2013-03-07T12:24:31.810 回答
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);
    }
  }
}
于 2017-12-05T19:40:38.280 回答