我正在尝试将一个bean注入一个Controller,但看起来Spring没有使用bean.xml文件。
以下是代码:
控制器
btnNewButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
// Code to execute when clicked
}
});
要注入的对象的接口
@RestController
public class AppController {
private final EventService eventService;
private List<String> categories;
public AppController(final EventService eventService) {
this.eventService = eventService;
}
}
其实施
public interface EventService {
// some methods
}
如果我使用@Service注释MyEventService,Spring会尝试将其注入Controller,但会抱怨没有提供baseURL(没有类型'java.lang.String'的限定bean可用)。所以我在src / main / resources
下创建了一个bean.xml文件public class MyEventService {
private final String baseURL;
public MyEventService(String baseURL){
this.baseURL = baseURL;
}
}
但这似乎不起作用,就好像我从MyEventService中删除了@Service抱怨没有为eventService找到一个bean。
我错过了什么吗?
答案 0 :(得分:1)
Spring Boot严重依赖于Java Config。
检查the docs如何声明@Component,@ Service等
在你的情况下:
@Service
public class MyEventService implements EventService {
private final String baseURL;
@Autowired
public MyEventService(Environment env){
this.baseURL = env.getProperty("baseURL");
}
}
在/src/main/resources/application.properties
中baseURL=https://baseUrl
然后
@RestController
public class AppController {
private final EventService eventService;
@Autowired
public AppController(final EventService eventService) {
this.eventService = eventService;
}
}
@Autowired将告诉Spring Boot查看使用@ Component,@ Service,@ Repository,@ Controller等声明的组件
为了注入类别,我真的建议你声明一个CategoriesService(带有@Service)从配置文件中获取类别,或者只是在CategoriesService类中对它们进行硬编码(用于原型设计)。
答案 1 :(得分:0)
您正在尝试的内容有两个问题
没有选择xml bean定义的原因是因为你没有在你的控制器中注入服务,因为你正在为你的控制器使用注释,你需要告诉控制器服务需要如何注入,修复此问题只需自动启动您的服务
valid: function() {
let inputs = this.$el.querySelectorAll('input');
for (let i = 0; i < inputs.length; i++) {
if (this[inputs[i].name] == '') {
return false;
}
}
return true;
}
当您对基于构造arg的spring bean使用注释时,您还需要设置值,就像在xml中一样。
@RestController
public class AppController {
@Autowired
private final EventService eventService;
}