Tho*_*kie 31 spring annotations dependency-injection spring-mvc autowired
哪个更正确?
这个(方法上有@Autowired注释)?
@Controller
public class MyController
{
private MyDao myDao;
@Autowired
public MyController(MyDao myDao)
{
this.myDao = myDao;
}
Run Code Online (Sandbox Code Playgroud)
这个(在属性上有@Autowired注释)?
@Controller
public class MyController
{
@Autowired
private MyDao myDao;
public MyController(MyDao myDao)
{
this.myDao = myDao;
}
Run Code Online (Sandbox Code Playgroud)
@Autowired注释应该去哪里?
Nam*_*ter 52
根据Javadoc for Autowired,注释可用于"构造函数,字段,setter方法或配置方法".有关详细信息,请参阅完整文档.
我个人更喜欢你的第一个选项(构造函数注入),因为该myDao字段可以标记为final:
@Controller
public class MyControllear {
private final MyDao myDao;
@Autowired
public MyController(MyDao myDao) {
this.myDao = myDao;
}
Run Code Online (Sandbox Code Playgroud)
构造函数注入还允许您在单元测试中测试类,而不需要依赖于Spring的代码.
第二种选择更好地写为:
@Controller
public class MyControllear {
@Autowired
private MyDao myDao;
MyController() {
}
Run Code Online (Sandbox Code Playgroud)
通过字段注入,Spring将创建对象,然后更新标记为注入的字段.
你没有提到的一个选择是@Autowired使用setter方法(setter注入):
@Controller
public class MyControllear {
private MyDao myDao;
MyController() {
}
@Autowired
public void setMyDao(MyDao myDao) {
this.myDao = myDao;
}
Run Code Online (Sandbox Code Playgroud)
您不必选择其中一个.您可以对某些依赖项使用字段注入,为同一对象使用其他构造函数注入.
| 归档时间: |
|
| 查看次数: |
32011 次 |
| 最近记录: |