一、IoC/DI相关
1. 如何进行依赖注入?
①依赖注入的三种方式
Ⅰ. 属性注入
/**
* Field 注入/属性注入
* */
// @Resource(name = "mySQLDbServiceImpl")
//
@Autowired
@Qualifier(value = "mySQLDbServiceImpl")
private DbService dbService;
@Autowired、@Resource均支持,使用简单代码简洁,是最常用的一种依赖注入方式;
Ⅱ. setter注入
/**
* setter注入
* */
private DbService dbService;
// @Resource(name = "mySQLDbServiceImpl")
@Autowired
@Qualifier(value = "mySQLDbServiceImpl")
public void setDbService(DbService dbService) {
this.dbService = dbService;
}
@Autowired、@Resource均支持,缺点是setter方法可能会被多次调用,注入对象有被修改的风险,很少使用;
Ⅲ. 构造器注入
/**
* 构造器注入
* */
private final DbService mySQLDbServiceImpl;
public DbController(DbService mySQLDbServiceImpl) {
this.mySQLDbServiceImpl = mySQLDbServiceImpl;
}
@Autowired支持,@Resource不支持,不过实际上不需要@Autowired也可以完成,如上面的代码;
构造器注入方式可以注入final修饰的对象(前两种注入方式都不可以),可以确保注入对象不会被修改,
而且因为构造器方法在类加载阶段就会执行,所以依赖对象在使用前就会被初始化,可以确保需要的依赖不为空;
构造器注入是Spring官方推荐的依赖注入方式,配合lombok的@RequiredArgsConstructor使用可以省去手写构造器的步骤,代码也非常简洁;
(注意:对于有多个实现类的接口,构造器注入是根据属性名来区分的,相当于byName,所以不要乱起属性名)
②@Autowired和@Resourece的区别
Ⅰ. @Autowired来自Spring框架,@Resource来自JDK;
Ⅱ. @Autowired支持属性、setter方法和构造器注入,@Resource只支持属性、setter方法;
Ⅲ. @Autowired默认采用byName的方式查找依赖,@Resource默认采用byType的方式查找依赖;
Ⅳ. 对于有多个实现类的接口的依赖注入,@Autowired可以通过@Qualifier注解的value属性来指定名称,@Resource可以通过其name属性来指定名称;
标签:依赖,Resource,SpringBoot,Autowired,mySQLDbServiceImpl,学习,原理,属性,注入 From: https://www.cnblogs.com/AvavaAva/p/17937297