我有以下控制器:
@Controller
public class UserNotificationController {
@RequestMapping(method = RequestMethod.GET, value = "/")
public ResponseEntity<?> doit() {
new ServiceUser().useService();
return new ResponseEntity<Object>(OK);
}
}
以及以下ServiceUser类:
@Component
public class ServiceUser {
private MyService service;
@Autowired
public void setService(@Qualifier(MyService.BEANID) MyService service) {
this.service = service;
}
public void useService() {
if (service == null) {
throw new IllegalStateException("fail");
}
}
}
如果我调用我的控制器,则不会注入MyService字段,并且我的代码会创建IllegalStateException。
当我将控制器更改为
时@Controller
public class UserNotificationController {
@Autowired
private ServiceUser su;
@RequestMapping(method = RequestMethod.GET, value = "/")
public ResponseEntity<?> doit() {
su.useService();
return new ResponseEntity<Object>(OK);
}
}
它有效。这是否意味着如果我想使用自动装配我需要一个注射链,那么Spring能够构建所有对象吗?有没有办法让第一个版本工作?我现有的代码主要是普通的java,我只是想在几个地方注入依赖项。我希望在构造函数调用之后,Spring会调用所有带注释的setter。
干杯 儒文