@Autowired注释应该在哪里-属性或方法上?

哪个更正确?

这(在方法上带有@Autowired注释)?

@Controller

public class MyController

{

private MyDao myDao;

@Autowired

public MyController(MyDao myDao)

{

this.myDao = myDao;

}

这(在属性上带有@Autowired注释)?

@Controller

public class MyController

{

@Autowired

private MyDao myDao;

public MyController(MyDao myDao)

{

this.myDao = myDao;

}

@Autowired注释应该去哪里?

回答:

根据用于自动装配的Javadoc,可以在“构造函数,字段,setter方法或config方法”上使用注释。有关更多详细信息,请参见完整的文档。

我个人更喜欢您的第一选择(构造函数注入),因为该myDao字段可以标记为final:

@Controller

public class MyControllear {

private final MyDao myDao;

@Autowired

public MyController(MyDao myDao) {

this.myDao = myDao;

}

构造器注入还允许您在单元测试中测试类,而无需依赖Spring的代码。

第二种选择最好写成:

@Controller

public class MyControllear {

@Autowired

private MyDao myDao;

MyController() {

}

使用字段注入,Spring将创建对象,然后更新标记为注入的字段。

您没有提到的一个选择是@Autowired使用setter方法(setter注入):

@Controller

public class MyControllear {

private MyDao myDao;

MyController() {

}

@Autowired

public void setMyDao(MyDao myDao) {

this.myDao = myDao;

}

您不必选择一个或另一个。您可以对某些对象使用字段注入,而对于同一对象,可以对其他对象使用构造函数注入。

以上是 @Autowired注释应该在哪里-属性或方法上? 的全部内容, 来源链接: utcz.com/qa/427787.html

回到顶部