一旦初始化了另一个spring bean,是否有人有一个很好的初始化模式?

jus*_*son 1 java spring lazy-initialization

我的情况在我的系统中不断出现,我正在寻找一个好的代码/配置模式.我还没想出一个让我开心的东西.

该系统是基于弹簧的,几乎所有的bean都是懒惰地初始化的.有许多不同的主类使用相同的弹簧上下文.通过显式初始化几个bean,每个bean最终使用bean的不同子集,然后spring负责初始化所有依赖项.除了这一个案例,一切都很好.

问题是我的一些bean使用了一个模式(在spring配置中),我的业务bean被声明,然后另一个bean依赖于它并提供一些外围功能.然而,其他豆类的自然依赖性是前者,即商业类.

这是一个例子:

<bean id="cache">
  ...
</bean>

<bean id="cacheCuller" class="ScheduledJobBean">
  <property name="scheduler" ref="scheduler"/>
  <property name="jobDetail">
    <bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
      <property name="targetObject" ref="cache"/>
      <property name="targetMethod" value="removeExpiredEntries"/>
      <property name="concurrent" value="false"/>
    </bean>
  </property>
  <property name="repeatInterval" value="300000" />
</bean>
Run Code Online (Sandbox Code Playgroud)

因此,上面的第二个bean基本上会在调度程序中注册一个触发器,这将导致第一个bean上的方法被定期调用.请记住,所有这些豆都是懒惰的.如果没有活动的"缓存"客户端bean,我不想创建"cacheCuller"并初始化"缓存".我希望spring在需要注入依赖项时初始化"缓存"(这很容易)但我还希望它在之后立即初始化"cacheCuller"(这很难).

我知道我可以将调度逻辑放入"缓存"类中,但我认为将它保存在spring配置中会很好.我还想让"缓存"类不受特定于Spring的代码的影响.如果其他bean自然依赖于"cacheCuller",那么这很容易,但事实并非如此.

其他方面也出现了同样的情况,例如使用MBeanServer注册bean.我想有一个第二个bean注册业务bean,但如果它没有被用作其他(第三个)bean的依赖项,我不希望它初始化业务bean本身.

Rya*_*art 6

我认为你正在寻找依赖.