@Autowired的春天和链条

时间:2014-06-02 07:22:48

标签: spring annotations autowired

我有以下控制器:

@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。

干杯 儒文

0 个答案:

没有答案