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[]> mop) {
		// 1. 此处的mop就包裹了M1和M2,mop具有一系列方法获取M的实现对象,可以灵活的选取其中的符合要求的bean来进行注入
        // 2. mybatis中对于插件的注入就是使用这种方式,批量获取插件然后注入
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章