嗨,我读了这段代码:
@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 是否必要?如果我们将其删除会怎样?
定义了 public OfflineAttributesComputer offlineAttributesComputer ? 我们应该使用公共静态OfflineAttributesComputer offlineAttributesComputer吗?
我们为什么需要 @PostConstruct ,我们能以常规方式初始化并安排更新吗?
答案 0 :(得分:1)
@Singleton
是否必要?如果我们删除它会发生什么?
嗯,这不是Spring注释。我相信不需要,因为Singleton是默认范围,请参见此处:Scope of @Configuration Class in spring
- 在类中定义了
public OfflineAttributesComputer offlineAttributesComputer
?我们应该使用public static OfflineAttributesComputer offlineAttributesComputer
吗?
否,不需要static
。您正在将纯Java的单例设计模式实现与Spring方法混合在一起。
- 为什么我们需要
@PostConstruct
,我们能以常规方式初始化并安排更新时间吗?
从您发布的代码中不需要它,我的意思是也可以用getter完成,但是OfflineAttributesComputer
不是bean。作者可能不希望其他人能够在其他课程中自动接线...