【发布时间】:2017-06-06 11:34:16
【问题描述】:
在使用 Spring Boot 时,很多 bean 都是由 Spring Boot 本身隐式创建的。例如,当我链接 spring-boot-starter-data-redis 依赖项时,jedisConnectionFactory 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方法的方法参数即可。public Transport eventTransport(JedisConnectionFactory connectionFactory)。通常,当您需要依靠ApplicationContext(或BeanFactory)来检索 bean 时,一般来说,您做错了(如果您不是框架/扩展开发人员)。 -
@M.Deinum 是的,我明白使用上下文,这就是为什么要问:) 我认为定义方法参数是我想要的,所以如果你把它作为答案发布我会接受的。谢谢!
标签: java spring spring-boot dependency-injection