我想创建不可变的作用域bean,但显然需要在某个时候初始化这样的bean。假设我有一个bean,其中包含 Locale
在处理过程中使用的。
我希望这个豆子在 Locale
所以我把它定义为:
public interface LocaleContext {
Locale getLocale();
}
在配置类中:
@Bean
@Scope(value = "process", proxyMode = ScopedProxyMode.TARGET_CLASS)
public LocaleContext localeContext() {
return null; // this way Spring recognizes that the bean exists, but has no default
// @Component doesn't work on interfaces
}
在使用场所,它可以用作:
@Autowired LocaleContext localeContext;
public void someMethod() {
localeContext.getLocale();
}
我还定义了 Scope
:
@Bean
public CustomScopeConfigurer configureProcessScope(ProcessScope scope) {
CustomScopeConfigurer configurer = new CustomScopeConfigurer();
configurer.addScope("process", scope);
return configurer;
}
实施 ProcessScope
是相当标准的(它就像一个 ThreadScope
).
现在的问题是,我如何得到 LocaleContext
要添加到当前范围吗?
假设我有一个类,在“process”作用域发生任何事情之前调用它,它可以创建一个有效的 LocaleContext
:
public void initialize() {
Locale locale = ... // get Locale from somewhere
// what to do here?
}
现在,我已经通过直接操纵 ProcessScope
,但感觉像是黑客攻击:
@Autowired ProcessScope scope;
public void initialize() {
Locale locale = ... // get Locale from somewhere
scope.get("scopedTarget.localeContext", () -> new LocaleContextImpl(locale));
}
有更好的办法吗?
暂无答案!
目前还没有任何答案,快来回答吧!