gpt4 book ai didi

java - @Bean注释在Spring Boot中不起作用

转载 作者:行者123 更新时间:2023-12-02 08:51:14 25 4
gpt4 key购买 nike

我创建了模型

@Repository
public class Model {
String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Model(String name) {
super();
this.name = name;
}

public Model() {
super();
// TODO Auto-generated constructor stub
}
}

然后我用一个bean创建了配置类

@Component
public class Config {

@Bean
public Model beanB() {
Model a=new Model();
a.setName("Daniel3");
return a;
}
}

然后我创建了 Controller 类

@RestController
public class TestController {

@Autowired
Model model;

@GetMapping("/test")
@ResponseBody
public Model test() {
return model;
}

}

当我点击 Controller URL 时,我收到以下响应

{"name":null}

但是如果我将配置类修改为

    @Bean
@Primary
public Model beanB() {
Model a=new Model();
a.setName("test");
return a;
}

我得到的输出为 {"name":"test"} 。当使用 Autowired Model 而不是 new Model() 时,我观察到相同的行为

谁能解释一下这种行为吗?

最佳答案

现在,当您在 Model 类上使用 @Repository 时,您正在注册两个不同的 Model 类型的 bean,但您不应该这样做这样做,因为这用于数据库存储库。如果您从 Model 中删除 @Repository,您将只有一个 bean 定义,因此可以将正确的 bean 注入(inject)到您的 Controller 中:

// @Repository remove this, should not be used here
public class Model {
String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Model(String name) {
super();
this.name = name;
}

public Model() {
super();
// TODO Auto-generated constructor stub
}
}

它与@Primary一起使用的原因是,您可以定义Model类型的所有bean之间的重要性顺序。

关于java - @Bean注释在Spring Boot中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60752584/

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