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类),批量获取插件然后注入
	}
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM