中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Framework中@Component組件如何使用

發布時間:2021-08-12 14:31:37 來源:億速云 閱讀:142 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關Spring Framework中@Component組件如何使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

@Component 簡單使用

@Component注解是一個元注解,即可以標注在其它的注解上。在spring中,任何被@Component注解標識的組件均為組件掃描的候選對象,并且被@Component元注解標注的注解,在任何組件標注它時,也被視作組件掃描的候選對象。簡單來說,就是在spring中,一個普通的javaBean被@Component注解標記后,在使用基于注解配置和類路徑掃描時,會被作為候選組件,添加到spring容器中

package com.spring.study.ioc.register;

/**
 * spring掃描的候選組件
 *
 * @author TangFD
 * @since 2019/6/25.
 */
@Data
@Component
public class TestComponent {
    private String id = "@Component";
}

添加spring啟動引導類,以及spring啟動時需要掃描的類路徑

/**
 * spring 容器啟動引導類
 *
 * @author TangFD
 * @since 2019/6/25.
 */
@ComponentScan("com.spring.study.ioc.register")
public class TestComponentBootstrap {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext =
                new AnnotationConfigApplicationContext(TestComponentBootstrap.class);
        System.out.println("context id : " + applicationContext.getId());
        TestComponent bean = applicationContext.getBean(TestComponent.class);
        System.out.println("TestComponent bean : " + bean);
        applicationContext.close();
    }
}

spring容器啟動后,控制臺打印的結果:

context id : org.springframework.context.annotation.AnnotationConfigApplicationContext@21b8d17c
TestComponent bean : TestComponent(id=@Component)

如此,在spring中通過簡單在一個普通的javaBean上添加@Component注解,再加上掃描類路徑,就可以將該javaBean添加到spring容器中。spring就可以對這個Bean的生命周期進行管理。

前面提到 @Component是一個元注解,當它標記在另一個注解上時,該組件同樣會具有被spring掃描,并識別組件的能力。在spring中,被 @Component標記的注解有很多,例如:@Controller@Service@Repository,當一個普通的javaBean被這些注解標注時,spring容器啟動時同樣會把該Bean視為候選組件,添加到容器中。

將上面TestComponent類的注解換成@Service,結果也是相同的

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
    @AliasFor(annotation = Component.class)
    String value() default "";
}
/**
 * spring掃描的候選組件
 *
 * @author TangFD
 * @since 2019/6/25.
 */
@Data
@Service
public class TestComponent {
    private String id = "@Service";
}

spring容器啟動后,控制臺打印的結果:

context id : org.springframework.context.annotation.AnnotationConfigApplicationContext@21b8d17c
TestComponent bean : TestComponent(id=@Service)

派生性層次性

這兩個概念源自慕課網中小馬哥的課程介紹,嚴格上講,注解是沒有派生性和層次性的,之所以這樣講,是因為在spring中的很多注解都是有著派生性和層次性的結構。通過這兩種特性,我們也可以自定義自己的注解,利用@Component元注解,來將普通的javaBean掃描添加到spring容器中

派生性
自定義一個注解@FirstAnnotation,被@Component元注解標識,并保持相同的簽名,當有組件使用@FirstAnnotation 注解標注時,就會被spring容器掃描并加載

/**
 * 自定義注解@FirstAnnotation,被@Component標注
 * @author TangFD
 * @since 2019/6/10.
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface FirstAnnotation {
    String value() default "";
}

將上面TestComponent類的注解換成@FirstAnnotation,結果也是相同的

/**
 * spring掃描的候選組件
 *
 * @author TangFD
 * @since 2019/6/25.
 */
@Data
@FirstAnnotation
public class TestComponent {
    private String id = "@FirstAnnotation";
}

spring容器啟動后,控制臺打印的結果:

context id : org.springframework.context.annotation.AnnotationConfigApplicationContext@21b8d17c
TestComponent bean : TestComponent(id=@FirstAnnotation)

層次性

Spring模式注解并不具有真正的派生性和層次性,只是像java類一樣,具有類似繼承和層次結構的功能

自定義一個注解@SecondAnnotation,被@FirstAnnotation注解標識,當有組件使用@SecondAnnotation 注解標注時,同樣會被spring容器掃描并加載

/**
 * 自定義注解@SecondAnnotation ,被@FirstAnnotation標注
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@FirstAnnotation
public @interface SecondAnnotation {
    String value() default "";
}

將上面TestComponent類的注解換成@SecondAnnotation,結果也是相同的

/**
 * spring掃描的候選組件
 */
@Data
@SecondAnnotation
public class TestComponent {
    private String id = "@SecondAnnotation";
}

spring容器啟動后,控制臺打印的結果:

context id : org.springframework.context.annotation.AnnotationConfigApplicationContext@21b8d17c
TestComponent bean : TestComponent(id=@SecondAnnotation)

上述就是小編為大家分享的Spring Framework中@Component組件如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巨鹿县| 洛扎县| 甘孜县| 读书| 石家庄市| 伊川县| 交城县| 方山县| 醴陵市| 遂昌县| 前郭尔| 梁平县| 瑞安市| 科技| 永川市| 额济纳旗| 罗平县| 武邑县| 西充县| 葵青区| 鄂托克旗| 合肥市| 南木林县| 丰都县| 日喀则市| 汶川县| 理塘县| 米脂县| 临安市| 怀安县| 龙里县| 英山县| 镇赉县| 锡林浩特市| 乳源| 浮梁县| 滨海县| 正蓝旗| 红原县| 南澳县| 岢岚县|