我正在使用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查找,我可以即时更改依赖关系。