Вся идея внедрения зависимостей состоит в том, чтобы не чтобы ваши классы знали или заботились о том, как они получают объекты, от которых зависят. При внедрении эти зависимости должны просто «появляться» без какого-либо запроса (отсюда и инверсия контроля). При использовании ApplicationContext#getBean(String)
вы по-прежнему запрашиваете зависимость (а-ля Service Locator), а это , а не Инверсия управления (даже если это позволяет легко изменять реализацию).
Таким образом, вместо этого вы должны сделать ваш MyController
управляемым компонентом Spring и внедрить MyService
, используя инжекцию на основе сеттера или конструктора.
public class MyController {
private MyService myService;
public MyController(MyService aService) { // constructor based injection
this.myService = aService;
}
public void setMyService(MySerice aService) { // setter based injection
this.myService = aService;
}
@Autowired
public void setMyService(MyService aService) { // autowired by Spring
this.myService = aService;
}
@RequestMapping("/blah")
public String someAction()
{
// do something here
myService.foo();
return "someView";
}
}
И сконфигурируйте Spring для соединения вещей.