中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Springboot中TypeFilter的作用是什么

本篇文章為大家展示了Springboot中TypeFilter的作用是什么,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)-云計(jì)算及IDC服務(wù)提供商,涵蓋公有云、IDC機(jī)房租用、樂山服務(wù)器托管、等保安全、私有云建設(shè)等企業(yè)級(jí)互聯(lián)網(wǎng)基礎(chǔ)服務(wù),服務(wù)熱線:18980820575

SpringBootApplication注解分析

Springboot中TypeFilter的作用是什么 從源代碼很容易看出來,它的作用就是自動(dòng)裝配和掃描我們的包,并將符合的類進(jìn)行注冊(cè)到容器。自動(dòng)裝配非常簡單,這里不做過多分析,接下來分析一下什么叫做符合規(guī)則的類。在@ComponentScan注解上面的過濾器類型的定義

public enum FilterType {
    ANNOTATION, //注解類型
    ASSIGNABLE_TYPE, //指定的類型
    ASPECTJ, //按照Aspectj的表達(dá)式,基本上不會(huì)用到
    REGEX, //按照正則表達(dá)式
    CUSTOM; //自定義

    private FilterType() {
    }
}
excludeFilters排除過濾器

這個(gè)是給我們排除符合的類,不讓他注冊(cè)到IOC的時(shí)候使用的, Springboot默認(rèn)使用兩個(gè)排除過濾器,很簡單的,網(wǎng)上隨便搜都可以找到相關(guān)說明,在這兒我舉個(gè)特舒列子就行了.

package com.github.dqqzj.springboot.filter;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author qinzhongjian
 * @date created in 2019-07-30 19:14
 * @description: TODO
 * @since JDK 1.8.0_212-b10
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Dqqzj {
    String value();
}
package com.github.dqqzj.springboot.filter;

import org.springframework.stereotype.Component;

/**
 * @author qinzhongjian
 * @date created in 2019-07-29 22:30
 * @description: TODO
 * @since JDK 1.8.0_212-b10
 */
@Dqqzj(value = "dqqzj")
@Component
public class Tt {
}
package com.github.dqqzj.springboot.filter;

import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.TypeFilter;

import java.io.IOException;

/**
 * @author qinzhongjian
 * @date created in 2019-07-30 19:13
 * @description: TODO
 * @since JDK 1.8.0_212-b10
 */
public class MyTypeFilter implements TypeFilter {
    @Override
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
        if (metadataReader.getAnnotationMetadata().isAnnotated(Dqqzj.class.getName())) {
            return true;
        }
        return false;
    }
}

Springboot中TypeFilter的作用是什么 以上代碼是正常邏輯,反過來這樣想,如果將Tt類的@Component注解去掉是不是也行的,所以這種排除注解一般都用在正??梢宰⑷氲饺萜鞯臅r(shí)候進(jìn)行添加的,那么我們上面說過,脫離Spring也可以注入到容器,該怎么實(shí)現(xiàn)呢?

includeFilters包含過濾器

脫離Spring原生注解,將將Tt類的@Component注解去掉

package com.github.dqqzj.springboot.filter;

import org.springframework.stereotype.Component;

/**
 * @author qinzhongjian
 * @date created in 2019-07-29 22:30
 * @description: TODO
 * @since JDK 1.8.0_212-b10
 */
@Dqqzj(value = "dqqzj")
//@Component
public class Tt {
}

Springboot中TypeFilter的作用是什么

透過現(xiàn)象看本質(zhì)

流程進(jìn)行梳理一下,注解驅(qū)動(dòng)在注入容器的關(guān)鍵掃描類(注意這里是指的掃描,而不是什么@Bean,@Import等其余注解都是建立在這個(gè)基礎(chǔ)之上的)

  • ComponentScanAnnotationParser

  • ClassPathBeanDefinitionScanner

  • ClassPathScanningCandidateComponentProvider

ClassPathScanningCandidateComponentProvider#registerDefaultFilters
protected void registerDefaultFilters() {
        this.includeFilters.add(new AnnotationTypeFilter(Component.class));
        ClassLoader cl = ClassPathScanningCandidateComponentProvider.class.getClassLoader();

        try {
            this.includeFilters.add(new AnnotationTypeFilter(ClassUtils.forName("javax.annotation.ManagedBean", cl), false));
            this.logger.trace("JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning");
        } catch (ClassNotFoundException var4) {
        }

        try {
            this.includeFilters.add(new AnnotationTypeFilter(ClassUtils.forName("javax.inject.Named", cl), false));
            this.logger.trace("JSR-330 'javax.inject.Named' annotation found and supported for component scanning");
        } catch (ClassNotFoundException var3) {
        }

    }

上述內(nèi)容就是Springboot中TypeFilter的作用是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

名稱欄目:Springboot中TypeFilter的作用是什么
分享URL:http://www.rwnh.cn/article8/gcgeop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)域名注冊(cè)、移動(dòng)網(wǎng)站建設(shè)電子商務(wù)、網(wǎng)站維護(hù)、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
海阳市| 澜沧| 东阿县| 广安市| 台中市| 宁波市| 鄂尔多斯市| 密山市| 铁力市| 柞水县| 昌都县| 洪泽县| 宣城市| 宿松县| 铁岭市| 扎赉特旗| 家居| 罗平县| 扬州市| 睢宁县| 彰化县| 泰安市| 平原县| 邢台县| 桑日县| 定远县| 平顺县| 本溪| 陕西省| 本溪| 靖州| 安岳县| 历史| 颍上县| 亳州市| 彭州市| 都安| 昌黎县| 惠来县| 鄂托克旗| 鹤山市|