gpt4 book ai didi

java - 何时在 Spring 中使用 Autowiring

转载 作者:IT老高 更新时间:2023-10-28 13:46:05 24 4
gpt4 key购买 nike

我正在看书Pro Spring 3 .它有一段让我很困惑。这一段是关于 Spring 的 Autowiring 。摘录如下:

In most cases, the answer to the question of whether you should use autowiring is definitely “no!” Autowiring can save you time in small applications, but in many cases, it leads to bad practices and is inflexible in large applications. Using byName seems like a good idea, but it may lead you to give your classes artificial property names so that you can take advantage of the autowiring functionality. The whole idea behind Spring is that you can create your classes how you like and have Spring work for you, not the other way around ...

... For any nontrivial application, steer clear of autowiring at all costs.

我一直在我创建的应用程序中使用@Autowired 标签。有人可以解释它有什么问题以及我应该改用什么吗?

我现在如何处理大多数事情的一个小例子是:

@Service("snippetService")
public class SnippetService {

@Autowired
private TestService testService;

public Snippet getSnippet() {
return testService.getSnippet();
}
}

这样使用 Autowiring 是“错误的”还是我遗漏了什么?

最佳答案

我相信这里有两件事混淆了。本章中“ Autowiring ”的意思是标记 bean 以便自动检测和注入(inject)依赖项。这可以通过设置“autowire” bean 属性来实现。

这实际上与使用 @Autowired 相反,您可以在其中明确指出依赖注入(inject)的字段或 setter 。

看看这里:http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/beans.html#beans-factory-autowire .

为了解释它,假设你有

public class SnippetService {

private TestService testService;

public Snippet getSnippet() {
return testService.getSnippet();
}

public void setTestService(TestService testService) {
this.testService = testService;
}
}

如果你定义了一个 bean:

<bean class="mypackage.SnippetService" autowire="byType"/>

spring 将尝试通过调用 setTestService setter 注入(inject)匹配类型的 bean,在这种情况下为 TestService。即使您没有使用 @Autowired。这确实很危险,因为某些 setter 可能不应该被 spring 调用。

如果您设置 autowire="no",则除非用 @Autowired@Resource@Inject 标记,否则不会注入(inject)任何内容。

关于java - 何时在 Spring 中使用 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12920606/

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