java - Spring 将一个 bean 的属性值注入(inject)另一个 bean

标签 java spring spring-boot dependency-injection

我的 spring boot 项目中有 2 个 java bean。第一个 bean 从属性文件( Spring 注入(inject))获取值,第二个 bean 从不同来源获取值。

在 spring 初始化之后,我想将第二个 bean 的属性值合并到第一个 bean 中。请告知 spring 是否提供任何类来动态注入(inject)值。

first bean gets the values from property file:
----------------------------------------------
@value("username")
private String username
@Value("server")
private String servername
@Value("inject from second bean")
private String location
@Value("inject from second bean")
private boolean enabled

second bean gets the values from different source
-----------------------------------------------
private String location
private boolean enabled

最佳答案

尝试使用表达语言:

@Value(#{anotherBean.location})
private String location
@Value(#{anotherBean.enabled})
private boolean enabled

更新

或者,您可以在帖子构造中分配它:

@Autowired
private AnotherBean anotherBean;

@PostConstruct
public void init(){
    location = anotherBean.getLocation();
    enabled = anotherBean.isEnabled();
}

更新 2

我想到的最后一个可以开箱即用的事情是将第一个 bean 的范围更改为原型(prototype)而不是单例:

@Scope("prototype")

现在每次使用此 bean(例如 spring 上下文中的 getBean)都会创建一个新实例。并且每次都会注入(inject)来自另一个 Bean 的新数据。

但这是特定的,因此您必须考虑这种情况是否适合您的应用程序。

关于java - Spring 将一个 bean 的属性值注入(inject)另一个 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41990373/

相关文章:

java - 检索项目 :No resource found that matches the given name 'Theme.AppCompat.Light' . 的父项时出错 MY R.java 丢失

java - 哪种功能组合方式最专业

java - 未发送位置 header 时从http响应获取URL

java - SwipeRefresh 布局进度条即使完成后也不会隐藏

java - 如何在 Spring 中注入(inject)一个 List 实例?

java - Spring MVC 以编程方式登录 : No qualifying bean of type MyUserDetailsService

java - Spring-Kafka 使用 ConcurrentKafkaListenerContainerFactory 来处理多个 @Kafkalistener

spring - Intellij 无法运行具有特定依赖项的 Spring 应用程序

mysql - SpringBootapp 无法连接 mysql 数据库

hibernate - Spring4 @Scheduled @Transaction 抛出多个数据源刷新时没有事务正在进行