Я использую Spring, вот контроллер:
@Controller
public class PersonController {
@Resource(name="PersonService")
private PersonService personService;
@RequestMapping(value = "/Person", method = RequestMethod.GET)
public String getPersons(Model model) {
// Retrieve all persons by delegating the call to PersonService
List<Person> persons = personService.getAll();
// Attach persons to the Model
model.addAttribute("persons", persons);
//then return to view jsp
}
, а вот сервис:
@Service("personService")
@Transactional
public class PersonService {
public List<Person> getAll() {
//do whatever
}
}
Однако, чтобы правильно использовать DI, я должен сменить контроллерчтобы использовать интерфейс (?), например, так:
@Controller
public class PersonController {
@Resource(name="personService")
private IPersonService personService; //Now an interface
}
Это позволит мне, например, использовать два сервиса: один тестовый и один живой.Что я мог бы изменить, добавив / удалив аннотацию к сервисам:
@Service("personService") // this line would be added/removed
@Transactional
public class LivePersonService implements IPersonService {
public List<Person> getAll() {
//do whatever
}
}
и
@Service("personService") //this line would be added/removed
@Transactional
public class TestPersonService implements IPersonService {
public List<Person> getAll() {
//do something else
}
}
Однако одно из основных преимуществ потеряно из-за того, что кодперекомпилироваться?Тогда как, если бы я использовал поиск в XML, я мог бы изменить зависимость на лету?