Spring bean在集合上设置destroy方法

时间:2018-04-21 13:51:26

标签: java spring

我在配置类中有Map作为bean,需要为所有map值提供Spring destroy方法:

@Configuration
public class ProducerConfiguration  {
    @Bean("producers")
    public Map<String, Producer> producers() { ... }
}

以上bean看起来像集合的原因是基于外部配置文件动态创建生成器。 对于没有集合的bean,可以使用@Bean注释上的 destroyMethod 属性轻松完成:

@Bean(destroyMethod = "close")
public Producer producer() { ... }

是否有可能以某种方式在集合bean上提供destroy方法?作为一种解决方法,我可以创建一个单独的类,它只包装一个集合并有一个close方法,但我不想为每个集合bean创建类。

1 个答案:

答案 0 :(得分:0)

如果您将地图注入每个Producer并且Producer.close()将从地图中删除指定的制作人,则可以这样做。

但是新类(包含map实例和destroy方法)看起来是我的最佳解决方案。您的自定义类可能使用泛型,因此内部地图字段将为Map<String, ? extends Closeable>。您不需要为Map<String, Something>, Map<String, SomethingElse>等单独的类

我会使用该类作为注册新生产者的唯一方法。 Map类有更多您真正需要的方法。例如,它支持删除密钥而不调用该密钥值的close。使用自定义类将能够正确执行业务规则'已关闭的生产者将从注册地图中删除'