SpringBoot根據條件,去注入需要的Bean


@ConditionalOnBean  當容器有指定Bean的條件下
@ConditionalOnClass  當容器有指定類的條件下
@ConditionalOnExpression 基於SpEL表達式作為判斷條件
@ConditionalOnJava 基於JVM版本作為判斷條件
@ConditionalOnJndi 在JDNI存在的條件下查找指定位置
@ConditionalOnMissingBean 當容器沒有指定Bean的情況下
@ConditionalOnMissingClass 當容器沒有指定類的情況下
@ConditionalOnNotWebApplication 當前項目不是Web項目的條件下
@ConditionalOnProperty 指定的屬性是否有指定的值
@ConditionalOnResource 類路徑是否有指定的值
@ConditionalOnSingleCandidate 當前指定Bean在容器中只有一個,或者雖然有多個但是指定首選Bean
@ConditionalOnWebApplication 當前項目是Web項目的情況下
比如根據property文件中的屬性值來決定注入哪個controller:
@ConditionalOnProperty(prefix = "school" ,name="SingleName",havingValue = "Gzykdx")
@Controller
public class GzykdxController extends BaseSchoolController {//廣州醫科大學

    @Override
    public String getTargetUrl() {
        return null;
    }

    @GetMapping("/getCaptcha")
    public void getCaptcha(HttpServletRequest request, HttpServletResponse resp){
        System.out.println("===================request:"+request.getSession().getId());
      ......

 

通過其兩個屬性name以及havingValue來實現的,其中name用來從application.properties中讀取某個屬性值。
如果該值為空,則返回false;
如果值不為空,則將該值與havingValue指定的值進行比較,如果一樣則返回true;否則返回false。
如果返回值為false,則該configuration不生效;為true則生效。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM