我不认为这是一个spring-amqp
特定的问题,但它提供了一个相对整洁的例子来激发我的问题。从spring-rabbit
Hello World project:
@Configuration
@Configuration
public class HelloWorldConfiguration {
…
@Bean /* <-- Optional?! What's the point? */
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost");
return connectionFactory;
}
@Bean
public AmqpAdmin amqpAdmin() {
return new RabbitAdmin(connectionFactory());
}
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory());
…
}
@Bean
// Every queue is bound to the default direct exchange
public Queue helloWorldQueue() {...}
}
我可以很容易地想到为什么AmqpAdmin
函数会产生一个bean,因此Queue
对象似乎是完全合理的。但在我看来,rabbitTemplate
和connectionFactory
可能是常规的非bean函数。甚至是静态功能,非常简单的动物。
添加这些功能的@Bean
注释是什么?它有哪些依赖注入模式?
以下答案无处不在。这些假设我知道我想要一个bean,并处理它为什么我没有得到它。我的问题在这里是不同的:为什么我需要这些东西成为一个豆?未修饰的功能不等同吗?