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中對於插件的注入就是使用這種方式,批量獲取插件然後注入
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章