Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring将属性值从一个bean注入到另一个bean中_Java_Spring_Spring Boot_Dependency Injection - Fatal编程技术网

Java Spring将属性值从一个bean注入到另一个bean中

Java Spring将属性值从一个bean注入到另一个bean中,java,spring,spring-boot,dependency-injection,Java,Spring,Spring Boot,Dependency Injection,在我的springboot项目中有2个javabean。第一个bean从属性文件(spring注入)获取值,第二个bean从不同的源获取值 在spring初始化之后,我想将第二个bean中的属性值合并到第一个bean中。请告知spring是否提供任何类来动态注入值 first bean gets the values from property file: ---------------------------------------------- @value("username") priv

在我的springboot项目中有2个javabean。第一个bean从属性文件(spring注入)获取值,第二个bean从不同的源获取值

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

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

尝试使用表达式Language:

@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的范围改为原型,而不是单例:

@Scope("prototype")
现在,每次使用这个bean(例如spring上下文上的getBean)时,都会创建一个新实例。。每次从另一个豆子里注入新的数据


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

这不会更新第一个bean,因为第二个bean在spring初始化后得到更新。如果在第二个bean中设置了任何默认值,那么它会在第一个bean中更新,但是如果第二个bean在初始化/后期构造后更新,则更改不会传播到第一个bean。唯一的替代方法是在后期构造中设置它们。。但如果你想以“实时”的方式更新它们。。然后您需要构建一些自定义的观察者或类似的东西。postconstruct不起作用。可能是我将更新第一个bean的getter方法来查看第二个bean属性getLocation(){anotherbean.getLocation()}我不想每次都创建新实例,这可能会影响性能。然后我将使用修改后的getter进行实时更新