當使用Spring Boot時,很多bean都是由Spring Boot本身隱式創建的。例如,當我鏈接spring-boot-starter-data-redis
依賴項時,jedisConnectionFactory
bean會自動創建。根據Spring的bean定義bean
我在尋找的是定義我的自定義bean的方式,它依賴於這樣一個隱式bean,例如, new MyService(jedisConnectionFactory)
。問題是我沒有一個變量或一個將被解析爲該隱式bean的方法。
現在我已經想出了以下解決方案:創建一個單獨的BeanConfig
類,自動裝配/注入ApplicationContext
到它,然後檢索與ApplicationContext.getBean(Class<T>)
方法調用所需的bean:
@Bean
public Transport eventTransport() {
final JedisConnectionFactory jedisConnectionFactory = context.getBean(JedisConnectionFactory.class);
return new RedisTransport(jedisConnectionFactory.getHostName(), jedisConnectionFactory.getPort());
}
是否有任何集成獲取對內部定義的bean的引用的方式?所以我可以將這個bean定義移動到MyApplication
類而不注入ApplicationContext
實例。
只需將它們添加爲'@ Bean'方法的方法參數即可。 '公共交通事件傳輸(JedisConnectionFactory connectionFactory)'。一般來說,當你需要依賴ApplicationContext(或者BeanFactory)來檢索bean的時候,一般來說,做錯了(如果你不是一個框架/擴展開發者)。 –
@ M.Deinum是的,我明白了關於使用上下文,這就是爲什麼問:)我認爲定義方法參數是正確的,所以如果你把它作爲答案發布,我會接受它。謝謝! – Scadge