gpt4 book ai didi

java - 使用注释注入(inject)依赖项是否会消除依赖注入(inject)(外部配置)的主要好处?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:15:05 25 4
gpt4 key购买 nike

我正在使用 Spring,这是一个 Controller :

@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 以使用接口(interface)(?),如下所示:

@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 查找,我可以即时更改依赖关系?

最佳答案

配置仍然是外部的,因为它在您定义将要注入(inject)的实现的地方。在类内部,您只需硬编码类依赖东西“名称”(没关系,因为这种依赖性是类)。

这就是说,您可以使用 XML 覆盖代码的注释以执行测试(您将拥有用于测试的特定 XML 应用程序上下文)并指定要注入(inject)的实现。

因此,您无需更改代码即可运行测试。看看this answer .

关于java - 使用注释注入(inject)依赖项是否会消除依赖注入(inject)(外部配置)的主要好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6548995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com