offlineAttributesComputer

offlineAttributesComputer

嗨,我读了这段代码:


@Configuration
@Singleton
public class myConfig {
    private static final org.apache.logging.log4j.Logger LOGGER = LogManager.getLogger(myConfig.class);


    public OfflineAttributesComputer offlineAttributesComputer;

    @PostConstruct
    public void init() {
        offlineAttributesComputer = getOfflineAttributesComputer();
    }

    public OfflineAttributesComputer getOfflineAttributesComputer(){
        OfflineAttributesComputer computer = new OfflineAttributesComputer();
        LOGGER.info("Successfully initialized offline computer.");
        return computer;
    }

    @Scheduled(fixedRate = 600000)
    public void updateOfflineAttributesComputer(){
        try {
            offlineAttributesComputer = getOfflineAttributesComputer();
            LOGGER.info("Successfully updated offline computer.");
        } catch (Exception e) {
            throw new EventBrokerException("Failed.", e);
        }
    }
}


基本功能类似于初始化单例对象,并在初始化后为offlineAttributesComputer分配一些值。然后每十分钟更新一次变量。

我有些不明白的地方:


@Singleton是否必要?如果我们将其删除会怎样?
在类中定义了公共的OfflineAttributesComputer offlineAttributesComputer?
我们应该使用公共静态OfflineAttributesComputer offlineAttributesComputer吗?
为什么我们需要@PostConstruct,我们可以按常规方式初始化并安排更新吗?

最佳答案

@Singleton是必要的吗?如果我们将其删除会怎样?
  


嗯,这不是Spring注释。我相信不需要,因为Singleton是默认范围,请参见此处:Scope of @Configuration Class in spring


  
  在类中定义public OfflineAttributesComputer offlineAttributesComputer?我们应该使用public static OfflineAttributesComputer offlineAttributesComputer吗?
  


否,不需要static。您正在将纯Java的Singleton设计模式实现与Spring方式混合在一起。


  
  为什么我们需要@PostConstruct,我们能以常规方式初始化并安排更新时间吗?
  


从您发布的代码中不需要它,我的意思是也可以在getter中完成,但OfflineAttributesComputer不是bean。作者可能不希望其他人能够在其他课程中自动接线...

08-07 04:54