spring中的java不可变作用域bean

zour9fqk  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(268)

我想创建不可变的作用域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));
 }

有更好的办法吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题