@Autowire依赖注入的三种方式
1、基于构造函数的依赖注入
public class UserServiceImpl implements UserService{
private UserDao userDao;
@Autowire
public UserServiceImpl(UserDao userDao){
this.userDao = userDao;
}
}
2、基于Setter的依赖注入
public class UserServiceImpl implements UserService{
private UserDao userDao;
@Autowire
public setUserDao(UserDao userDao){
this.userDao = userDao;
}
}
3、基于字段的依赖注入
public class UserServiceImpl implements UserService{
@Autowire
private UserDao userDao;
}
注意事项及建议:
1、基于字段的依赖注入方式会在Idea中会有黄色警告Field injection is not recommended,即不推荐属性字段注入的方式,在文档中不建议使用基于字段的依赖注入方式。
2、对于必需的依赖项,建议使用基于构造函数的注入,以使它们成为不可变的,并防止它们为null。
3、对于可选的依赖项,建议使用基于Setter的注入。
4、对于有final修饰的变量,只能使用基于构造函数的依赖注入的方式。