Spring@Bean注解修饰带参数方法
5/26/2021 Spring
/**
* 声明队列交换机等
* @param connectionFactory
* @return
*/
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
System.out.println(String.format("-----------getRabbitAdmin:%s", connectionFactory.hashCode()));
return new RabbitAdmin(connectionFactory);
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
有参数connectFactory,若spring容器中只有一个ConnectionFactory 类型的bean,则不论参数取名为何都是按类型取bean ConnectionFactory 为参数,若有多个则参数取名必须为多个bean中的一个,否则报错。
在SpringBoot中利用这一自动装配特性实现了对用户配置的兼容:
@Bean
@ConditionalOnBean(MultipartResolver.class) //容器中有这个类型组件
@ConditionalOnMissingBean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) //容器中没有这个名字 multipartResolver 的组件
public MultipartResolver multipartResolver(MultipartResolver resolver) {
//给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找。
//SpringMVC multipartResolver。防止有些用户配置的文件上传解析器不符合规范
// Detect if the user has created a MultipartResolver but named it incorrectly
return resolver;//给容器中加入了文件上传解析器;
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
在用户配置multipartResolver,且未正确命名时,将这一对象封装重新注册。