gpt4 book ai didi

java - 我的类文件正在初始化可能是因为我有一个同一类的 @bean,但在不同的 .java 文件中

转载 作者:行者123 更新时间:2023-11-30 01:50:16 24 4
gpt4 key购买 nike

我是 spring 和注释的新手。我在 Debug模式下启动了应用程序,发现当我的代码到达 Actuator 的 init() 方法时,分配给 actVar1 和 actVar2 的值低于该值。

actVar1 具有“abc”值

actVar2 具有“xyz”值

注意:我的应用程序尚未完全启动。我只是出于不同的目的尝试在 init() 方法中使用调试点,并且我观察到了上述情况。

我的问题是为什么这些变量分配了这些值。

//Actuator.java 
@Component
public class Actuator {
private String actVar1;
private String actVar2;
//.. some code here
@PostConstruct
public void init(){
//my debug point is here
//some code .....
}
//.. some code here

}
//Beancreator.java
@Component
public class BeanCreator {
//.. some code here
private String first="abc";
private field2 second ="xyz";
//.. some code here

@Bean
public Actuator actuator() {
Actuator actuator = new Actuator();
actuator.setActVar1(first);
actuator.setActVar2(second);
return actuatorPoller;
}
//.. some code here
}

当我将 @Bean 下的方法名称更改为不同的方法名称时,这些值不会被分配。

最佳答案

My question is why those variables have assigned those values ?

首先,Spring 创建一个 bean 后,它会调用该 bean 的 @PostConstruct 方法。

其次,Spring会为以下情况创建一个bean:

  • 如果类由 @Component 或其 stereotype annotation 注解例如@Repository、@Service、@Controller等,并且对包含该类的包启用了自动扫描功能,它将为其创建一个 bean。

  • 如果 @Configuration/@Component 类上的方法用 @Bean 注解,Spring 将 call that method to create a bean

因此,您的示例创建了 2 个 Actuator 类型的 bean。 A 是由于 Actuator 类上的 @Component 引起的,而 B 是由于 BeanCreator.actuator() 上的 @Bean 方法引起的>.这就是为什么您会看到 init() 执行两次,因为有两个 Actuator bean。对于 A ,其 init() 使用 NULL 执行。对于 B,它的 init() 使用“abc”和“xyz”执行,只是因为您在创建它的 @Bean 方法中设置了它。

关于java - 我的类文件正在初始化可能是因为我有一个同一类的 @bean,但在不同的 .java 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56324002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com