在spring boot 如果需要配置一个bean 像在spring mvc中一样,那么需要使用 @Bean 这个注解。
@Configuration //表示这个一个配置类,相当于spring的xml 文件
public class RabbitDDyiQueueConfig {
public static final String DDYI_QUEUE = "DDYI_QUEUE";
public static final String DDYI_DIRECTEXCHANGE = "DDYI_DIRECTEXCHANGE";
public static final String DDYI_SEND_ROUTEKEY = "DDYI_SEND_ROUTEKEY";
/**
*
* @return
*/
@Bean //相当于spring <bean id="ddyiQueue" class = "org.springframework.amqp.core.Queue"> 默认的名称 就是方法名
public Queue ddyiQueue(){
return new Queue(DDYI_QUEUE);
}
@Bean
public DirectExchange ddDirectExchange() {
return new DirectExchange(DDYI_DIRECTEXCHANGE);
}
@Bean //如果需要传参数,直接加方法,默认参数按照类型匹配,如果多个参数,需要加@Qualifier("方法名称")
public Binding DDBinding1a(@Qualifier("ddDirectExchange") DirectExchange directExchange,@Qualifier("ddyiQueue") Queue ddyiQueue) {
return BindingBuilder.bind(ddyiQueue).to(directExchange).with(DDYI_SEND_ROUTEKEY);
}
@Bean
public Binding DDBinding1a() {
return BindingBuilder.bind(ddyiQueue()). //这和上面在方法里指定参数 不一样,确实现了相同的功能。
// 因为spring boot 会对 加了@bean的方法 进行拦截。通过BeanMethodInterceptor这个拦截器,
//如果 ddyiQueue() 的对象 没有初始化 ,会进行初始化并且放在单列map中,如果初始化了,直接从单列map中获取
//如果 传的参数 没有 @Bean 这种类型注解,拦截器不会进行拦截,正常调用对应的set方法进行赋值
to(ddDirectExchange()).
with(DDYI_SEND_ROUTEKEY);
}
}
initMethod :是初始化的方法
destroyMethod:
name : 指定id
bean 初始化 也可以指定顺序,通过@DependsOn 可以让bean 在指定依赖对象后面执行