繁体   English   中英

分层应用程序上下文以及标准范围和自定义范围

[英]Hierarchical Application Context and Standard-Scopes and Custom-Scopes

我的问题有点复杂:)我将尝试解释我的设置...

  • 我有一个Web应用程序,一个Web Spring上下文,带有一些单例,会话作用域的bean,有时是aop代理等。
  • 在应用程序内部,我创建了一些基础结构以能够“启动”某些子上下文,我手动进行了此操作,分别定义了spring-configuration类,这些类不包括在顶层/主spring-context-bean-scan中,在应用程序中有未定义数量的此类子上下文...
  • 具有子上下文的功能是可选的,因此该应用程序也只能在主上下文中运行
  • 在主上下文和子上下文的内部,我正在使用一些类/接口-将“顶层”和“子组件级” bean分开,我创建了两个附加的Qualifier注释...通过此注释,我将自动装配的东西,以便我认为在正确的地方使用正确的bean :)
  • 想象在顶层有FooBarService,在每个子上下文中有N个FooBarService,每个Service必须具有自己的“拥有”状态,因此N + 1个实例在整个应用程序中运行
  • 一些子上下文Bean正在使用(注入)顶级Bean等。
  • 这似乎到目前为止

  • 但是现在我调查了一个大的内存泄漏:(我想我发现了问题...

  • 对于子组件,我创建了自己的“会话范围”实现(哈希映射,没有真正的清理等。urgs ),并通过“ CustomScopeConfigurer”将其范围注册为每个(手动启动)子组件的“ SESSION”。上下文...这样,我仍然可以在子上下文弹簧配置类中使用“常规” @Scope(value = WebApplicationContext.SCOPE_SESSION)方法

Q1:这个“手工”示波器是个好主意吗? :D Q2:此“手工”范围应该是“会话范围”内的一种“转换范围”,但请记住,此范围在“会话”中存在N次,因此我们将其称为“会话-1”范围”,“ conversation-2-scope” ...“ conversation-N-scope” Q3:何时以及如何清除此类“ conversation-scope”?

  • 我从分层的Spring上下文中期望,将在父上下文中请求(尝试)在“子上下文”中找不到的bean-是这样吗?

问题4:是否有必要像这样在“子上下文”中注册“父上下文”中的所有已知范围:

 final ConfigurableListableBeanFactory parentBeanFactory = ((AbstractApplicationContext) parentSpringContext).getBeanFactory();
  final ConfigurableListableBeanFactory beanFactory = springApplicationContext.getBeanFactory();
  final String[] scopeNames = parentBeanFactory.getRegisteredScopeNames();
  for (final String scopeName : scopeNames) {
    final Scope scope = parentBeanFactory.getRegisteredScope(scopeName);
    beanFactory.registerScope(scopeName, scope);
  }

这是我的“结构”的可视化:

TOP-LEVEL-Context
 |-* session-scoped beans
 |-* singleton beans (HelloWorldService)
 |
 |->SUB1-Context
 |  |-* session-scoped beans (FooBarService - depends on HelloWorldService)
 |  |-* singleton beans
 |
 |->SUB2-Context
 |  |-* session-scoped beans (FooBarService - depends on HelloWorldService)
 |  |-* singleton beans
 |
 |->...

任何提示都很棒:)

问候安德烈亚斯

您是否正在寻找WeakHashMap ...?

我不知道所有的Spring废话:)-但是当我需要创建并稍后在使用Dagger2时自动释放子图时,上述操作很方便。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM