我在配置类中有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创建类。
答案 0 :(得分:0)
如果您将地图注入每个Producer
并且Producer.close()
将从地图中删除指定的制作人,则可以这样做。
但是新类(包含map实例和destroy方法)看起来是我的最佳解决方案。您的自定义类可能使用泛型,因此内部地图字段将为Map<String, ? extends Closeable>
。您不需要为Map<String, Something>, Map<String, SomethingElse>
等单独的类
我会使用该类作为注册新生产者的唯一方法。 Map类有更多您真正需要的方法。例如,它支持删除密钥而不调用该密钥值的close
。使用自定义类将能够正确执行业务规则'已关闭的生产者将从注册地图中删除'