我刚刚发现了一种我无法理解的Spring的行为。我使用的是Spring Boot 1.5。十、
在一个配置类中,我声明了两个不同的bean。
@Configuration
class Config {
@Bean("regularRestTemplate")
public RestTemplate regularRestTemplate(String toLog) {
return new RestTemplateBuilder().setConnectTimeout(100)
.setReadTimeout(100)
.additionalInterceptors((request, body, execution) -> {
log.info("Inside the interceptor {}", toLog);
return execution.execute(request, body);
})
.build();
}
@Bean("exceptionalRestTemplate")
public RestTemplate regularRestTemplate() {
return new RestTemplateBuilder().setConnectTimeout(100)
.setReadTimeout(100)
.build()
}
}
然后,我有一个类,它应该使用名为exceptionalRestTemplate
的bean。
@Component
class Client {
private RestTemplate restTemplate;
@Autowired
public Client(@Qualifier("exceptionalRestTemplate") RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
// Code that uses the injected rest template
}
因为我指定了我想要使用@Qualifer
注释注入的bean的名称,所以我希望Spring注入名为异常alRestTem板
的bean。但是,在注入过程中实际上使用了名为正规的RESTTem板
的bean。
事实证明,问题在于在配置类中声明bean的方法的名称。两者都是colled常规的。更改第二种方法名称,解决问题。
我的问题是,为什么?我知道Spring使用带有
@Bean
或@Component
,@Service
等注释的类和方法的名称。。。注释为分辨率映射内的Java对象命名。但是,我认为在这些注释中给出一个名称会覆盖这种行为。
有人告诉我发生了什么事吗?
Bean限定符和Bean名称是不同的含义。您对新bean进行了限定,但试图覆盖它(参数无关紧要)。在应用程序中,不能重写bean,因此只有第一个bean。
你可以检查这个“理论”。在配置中添加参数
spring.main.allow-bean-definition-overriding=true
并再次启动您的应用程序。之后,你就只有第二颗豆子了。
这是对碰撞的解释。但是解决方案是将豆子分离成不同的配置。
假设我有一个类,,其构造函数采用目标名称。为了对这个类进行CDI验证,我可以编写一个类似这样的生成器,它检查注入点以找到一个名为的注释(不是限定符,因为生成器方法不能用它可以生成的所有可能的主题名值进行注释): 但是假设这个类很重,但是线程安全,因此应该尽可能多地共享。这意味着我希望任何看起来像的注入站点共享以FooBar作为名称构建的的相同实例。 我们不能将producer方法标记为Applic
我有一个Spring bean,在Spring Bean中我有一个对其他bean列表的依赖项。我的问题是:如何注入一个通用的bean列表作为该bean的依赖项? 例如,一些代码: 我的豆子: 问题是:;如何在Painter中获得颜色列表?另外,还有一点:我应该让@Configuration返回接口类型还是类? 谢谢你的帮助!
我已经使用Spring几十年了,但以前从未遇到过这个用例。 是否有方法注入所有带特定注释的bean,例如,所有带服务的bean或所有带自定义注释的bean? 我唯一的想法是注入上下文,获取所有bean并手动过滤。如果这是唯一的方法,Spring是否公开了一种递归扫描类层次结构以查找(元)注释的方法(因为大多数Spring注释都可以用作元注释)?
我在JavaConfig中发现了这一点,它看起来如下所示: 如果我的假设错了,请纠正我。 3)我需要将我的类注释为@Component(Scope=“Workflow”)。同样,xml配置将如下所示:
本文向大家介绍Spring @Bean注解配置及使用方法解析,包括了Spring @Bean注解配置及使用方法解析的使用技巧和注意事项,需要的朋友参考一下 使用说明 这个注解主要用在方法上,声明当前方法体中包含了最终产生 bean 实例的逻辑,方法的返回值是一个 Bean。这个 bean 会被 Spring 加入到容器中进行管理,默认情况下 bean 的命名就是使用了 bean 注解的方法名。@B
我在Spring boot应用程序中不断遇到冲突BeanDefinitionException错误。我不完全确定如何解决这个问题,我有几个带注释的类来帮助设置Thymeleaf、Spring Security和Web。为什么应用程序尝试设置homeController两次?(它在哪里尝试这样做?) 错误是: 我的spring boot主应用程序初始值设定项: 我的数据库配置文件: 我的Thymel