SpringBoot之ObjectProvider类

ObjectProvider的使用

SpringBoot中很多地方都用到这个特性,尤其是在很多AutoConfiguration中,比如mybatis的AutoConfiguration

Spring注入方式

  1. setter方法
  2. 构造方法
  3. 属性注入

同一个接口多个实现的注入

对于一个接口M

public interface M {}

M有2个实现类

public M1 implements M {}
public M2 implements M {}

此时在A类如果注入M会报错,会找到2个M的实例

public class A {
	@Resource
	private M m;
}

解决方式

  1. 在某一个实现类使用@Primary注解
  2. 使用@Qualifier指定bean名称

ObjectProvider方式

public class A {
	public A(ObjectProvider<M[]> ms) {
        // 1. 此处的ms就包裹了M1和M2,ms具有一系列方法获取M的实现对象,可以灵活的选取其中的符合要求的bean来进行注入
        // 2. mybatis中对于插件的注入就是使用这种方式(MybatisAutoConfiguration类),批量获取插件然后注入
	}
}
posted @ 2022-02-17 15:44  神一样的存在  阅读(1419)  评论(0)    收藏  举报