【发布时间】:2020-03-19 07:23:50
【问题描述】:
我创建了模型
@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;
}
}
当我点击控制器 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 注释错误。请阅读spring.io/projects/spring-framework#learn 的文档以了解有关注释含义和使用位置的更多信息。这是一个模型类,应该在每个请求中实例化,因为状态会改变。
-
如果您只是在测试 Bean 创建的工作原理,@rieckpil 在下面回答了您的问题 :)
-
使用
@RestController时,不需要使用@ResponseBody。
标签: java spring spring-boot