ObjectProvider的使用
SpringBoot中很多地方都用到這個特性,尤其是在很多AutoConfiguration
中,比如mybatis的AutoConfiguration
Spring注入方式
- setter方法
- 構造方法
- 屬性注入
同一個接口多個實現的注入
對於一個接口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;
}
解決方式
- 在某一個實現類使用
@Primary
註解 - 使用
@Qualifier
指定bean名稱
ObjectProvider方式
public class A {
public A(ObjectProvider<M[]> mop) {
// 1. 此處的mop就包裹了M1和M2,mop具有一系列方法獲取M的實現對象,可以靈活的選取其中的符合要求的bean來進行注入
// 2. mybatis中對於插件的注入就是使用這種方式,批量獲取插件然後注入
}
}