我正在阅读Pro Spring 3一书.它有一段让我很困惑的段落.这一段是关于春天的自动装配.这是一段摘录:
在大多数情况下,关于是否应该使用自动装配问题的答案绝对是"不!"自动装配可以节省您在小型应用程序中的时间,但在许多情况下,它会导致不良做法,并且在大型应用程序中不灵活.使用byName似乎是一个好主意,但它可能会导致您为类提供人工属性名称,以便您可以利用自动装配功能.Spring背后的整个想法是,你可以创建你喜欢的类,让Spring为你工作,而不是相反...
...对于任何重要的应用,不惜一切代价避免自动装配.
我一直在我创建的应用程序中使用@Autowired标记.有人可以解释它有什么问题以及我应该使用什么?
关于我如何处理大多数事情的一个小例子是:
@Service("snippetService")
public class SnippetService {
@Autowired
private TestService testService;
public Snippet getSnippet() {
return testService.getSnippet();
}
}
Run Code Online (Sandbox Code Playgroud)
使用像这样"错误"的自动装配还是我错过了什么?
mre*_*isz 25
我相信这里有两件事情混乱.本章中"自动装配"的含义是标记用于自动检测和注入依赖关系的bean.这可以通过设置"autowire"bean属性来实现.
事实上,这与使用@Autowired明确表示依赖注入的字段或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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你定义了一个bean:
<bean class="mypackage.SnippetService" autowire="byType"/>
Run Code Online (Sandbox Code Playgroud)
spring会尝试TestService通过调用setTestService setter 来注入匹配类型的bean .即使你没有使用@Autowired.这确实是危险的,因为一些人可能不会被春天召唤.
如果设置自动装配="否",什么都不会被注入,除非标记,以便有@Autowired,@Resource,@Inject.
| 归档时间: |
|
| 查看次数: |
20250 次 |
| 最近记录: |