嗨,我读了这段代码:
@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。作者可能不希望其他人能够在其他课程中自动接线...