SpringBootを使用すると、SpringBoot自体によって多くのBeanが暗黙的に作成されます。たとえば、spring-boot-starter-data-redis
の依存関係をリンクすると、jedisConnectionFactory
beanが自動的に作成されます。SpringのBeanに依存してBeanを定義します。
私が探しているのは、このような暗黙のBeanに依存するカスタムBeanを定義する方法です。 new MyService(jedisConnectionFactory)
。問題は、その暗黙のBeanに解決される変数またはメソッドがないことです。
は、今の私は、次の解決策を作ってみた:ApplicationContext.getBean(Class<T>)
メソッド呼び出しで必要な豆取得し、その後/別のBeanConfig
クラス、autowireを作成し、それにApplicationContext
を注入して:
@Bean
public Transport eventTransport() {
final JedisConnectionFactory jedisConnectionFactory = context.getBean(JedisConnectionFactory.class);
return new RedisTransport(jedisConnectionFactory.getHostName(), jedisConnectionFactory.getPort());
}
を任意の統合あり内部的に定義されたBeanへの参照を取得する方法は?そこで、ApplicationContext
インスタンスを挿入することなく、このbean定義をMyApplication
クラスに移すことができました。 JedisConnectionFactory
クラスは春によってインスタンス化されたばかり
'@ Bean'メソッドのメソッド引数として追加するだけです。 'public Transport eventTransport(JedisConnectionFactory接続ファクトリー)'。一般的に言えば、 'ApplicationContext'(または' BeanFactory')に依存してBeanを取得する必要があるときは、間違っています(あなたがフレームワーク/拡張開発者でない場合)。 –
@ M.Deinumはい、私はコンテキストを使用することについてそれを得る、それはなぜ尋ねる:)私はメソッドの引数を定義することが私が探していたものだと思うので、あなたが答えとしてそれを投稿すれば私はそれを受け入れるでしょう。ありがとう! – Scadge