需求是这样的,要做个上传接口,默认用cos上传,如果自定义实现接口,就用自定义实现的方法,发现spring的@ConditionalOnMissingBean
可以解决这个问题。
使用@ConditionalOnMissingBean
注解,当没有用户自定义的实现时,Spring将使用这个默认实现。
1、 定义接口
package com.demo;
public interface UploadService {
void uploadImg();
}
2、定义默认的实现类
package com.demo;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Service;
@Service
@ConditionalOnMissingBean(UploadService .class)
public class UploadServiceImpl implements UploadService {
@Override
public void uploadImg() {
System.out.println("uploadImg");
}
}
3、自定义实现
package com.demo;
import com.demo.UploadService ;
import org.springframework.stereotype.Service;
@Service
public class CosUploadServiceImpl implements UploadService {
@Override
public void uploadImg() {
System.out.println("CosUploadServiceImpl ");
}
}
如果用户自定义了一个UploadService 接口的实现CosUploadServiceImpl ,Spring会找到并使用这个实现。
如果没有找到任何自定义实现,Spring会使用@ConditionalOnMissingBean注解标记的默认实现UploadServiceImpl 。