最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot @Configuration和@Componment的區(qū)別及說(shuō)明

 更新時(shí)間:2024年06月04日 08:59:11   作者:@Ycoder  
這篇文章主要介紹了springboot @Configuration和@Componment的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

@Configuration和@Componment的區(qū)別

@Configuration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";
}
public class Car {

    private int id;

    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

public class Driver {

    private int id;

    private String name;

    private Car car;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }

}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyTestConfig {

    @Bean
    public Driver driver() {
        Driver driver = new Driver();
        driver.setId(1);
        driver.setName("driver");
        driver.setCar(car());
        return driver;
    }

    @Bean
    public Car car() {
        Car car = new Car();
        car.setId(1);
        car.setName("car");
        return car;
    }

}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Component
public class MyTestConfig {
    @Bean
    public Driver driver() {
        Driver driver = new Driver();
        driver.setId(1);
        driver.setName("driver");
        driver.setCar(car());
        return driver;
    }
    @Bean
    public Car car() {
        Car car = new Car();
        car.setId(1);
        car.setName("car");
        return car;
    }

}

上面兩段代碼除MyTestConfig類(lèi)上的注解不同之外其他都相同,但Spring對(duì)兩者的處理方式是完全不一樣的。

第一段代碼會(huì)像我們期望的一樣正常運(yùn)行

因?yàn)閐river()這段代碼中driver.setCar(car())方法會(huì)由Spring代理執(zhí)行,

Spring發(fā)現(xiàn)方法所請(qǐng)求的Bean已經(jīng)在容器中,那么就直接返回容器中的Bean。

所以全局只有一個(gè)Car對(duì)象的實(shí)例。

第二段代碼在執(zhí)行driver()

時(shí)driver.setCar(car())不會(huì)被Spring代理,會(huì)直接調(diào)用car()方法獲取一個(gè)全新的Car對(duì)象實(shí)例,所以全局會(huì)有多個(gè)Car對(duì)象的實(shí)例

造成這種差異的原因如下:

概括就是 @Configuration 中所有帶 @Bean

注解的方法都會(huì)被動(dòng)態(tài)代理,因此調(diào)用該方法返回的都是同一個(gè)實(shí)例。

其工作原理是:如果方式是首次被調(diào)用那么原始的方法體會(huì)被執(zhí)行并且結(jié)果對(duì)象會(huì)被注冊(cè)到Spring上下文中,之后所有的對(duì)該方法的調(diào)用僅僅只是從Spring上下文中取回該對(duì)象返回給調(diào)用者。

在上面的第二段代碼中

driver.setCar(car())只是純JAVA方式的調(diào)用,多次調(diào)用該方法返回的是不同的對(duì)象實(shí)例。

要修正第二段代碼中的問(wèn)題,可以使用@Autowired如下所示:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

//@Configuration
@Component
public class MyTestConfig2 {

    @Autowired
    Car car;
    
    @Bean
    public Driver driver() {
        Driver driver = new Driver();
        driver.setId(1);
        driver.setName("driver");
        driver.setCar(car);
        return driver;
    }

    @Bean
    public Car car() {
        Car car = new Car();
        car.setId(1);
        car.setName("car");
        return car;
    }

}

總結(jié)

1. 通過(guò)@Configuration或者@Componment注解的類(lèi)默認(rèn)是非懶加載,可以使用@Lazy或者在@Bean上@Lazy開(kāi)啟懶加載;

2. 通過(guò)@Configuration注解的類(lèi)默認(rèn)會(huì)被CGLIB動(dòng)態(tài)代理,所有被 @Bean 注解標(biāo)記的方法將來(lái)都是通過(guò)代理方法進(jìn)行調(diào)用,在該類(lèi)中使用@Bean時(shí)為單列;

3. 通過(guò)@Componment注解的類(lèi)默認(rèn)不會(huì)產(chǎn)生動(dòng)態(tài)代理,在該類(lèi)中使用@Bean,是多實(shí)例的。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java實(shí)現(xiàn)的各種排序算法代碼示例

    java實(shí)現(xiàn)的各種排序算法代碼示例

    這篇文章主要介紹了java實(shí)現(xiàn)的各種排序算法代碼示例,比較全面,代碼親測(cè)可用,如有不足之處,歡迎留言指出。
    2017-10-10
  • java calendar 日期實(shí)現(xiàn)不斷加一天的代碼

    java calendar 日期實(shí)現(xiàn)不斷加一天的代碼

    這篇文章主要介紹了java calendar 日期實(shí)現(xiàn)不斷加一天的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • Java8中 LocalDate和java.sql.Date的相互轉(zhuǎn)換操作

    Java8中 LocalDate和java.sql.Date的相互轉(zhuǎn)換操作

    這篇文章主要介紹了Java8中 LocalDate和java.sql.Date的相互轉(zhuǎn)換操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Java實(shí)現(xiàn)花卉管理系統(tǒng)

    Java實(shí)現(xiàn)花卉管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)花卉管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Java圖片處理 (文字水印、圖片水印、縮放、補(bǔ)白)代碼實(shí)例

    Java圖片處理 (文字水印、圖片水印、縮放、補(bǔ)白)代碼實(shí)例

    這篇文章主要介紹了Java圖片處理 (文字水印、圖片水印、縮放、補(bǔ)白)代碼實(shí)例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-06-06
  • SpringBoot如何優(yōu)雅實(shí)現(xiàn)接口參數(shù)驗(yàn)證

    SpringBoot如何優(yōu)雅實(shí)現(xiàn)接口參數(shù)驗(yàn)證

    為了保證參數(shù)的正確性,我們需要使用參數(shù)驗(yàn)證機(jī)制,來(lái)檢測(cè)并處理傳入的參數(shù)格式是否符合規(guī)范,所以本文就來(lái)和大家聊聊如何優(yōu)雅實(shí)現(xiàn)接口參數(shù)驗(yàn)證吧
    2023-08-08
  • 一文詳細(xì)地講解Java異常及要如何處理

    一文詳細(xì)地講解Java異常及要如何處理

    在Java中異常處理是一種重要的編程概念,用于處理程序執(zhí)行過(guò)程中可能出現(xiàn)的錯(cuò)誤或異常情況,這篇文章主要介紹了Java異常及要如何處理的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • 在Filter中不能注入bean的問(wèn)題及解決

    在Filter中不能注入bean的問(wèn)題及解決

    這篇文章主要介紹了在Filter中不能注入bean的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 使用Java生成JWT令牌的示例代碼

    使用Java生成JWT令牌的示例代碼

    json-web-token簡(jiǎn)稱java web令牌,也稱作JWT,是一種可以實(shí)現(xiàn)跨域身份驗(yàn)證身份的方案,jwt不加密傳輸數(shù)據(jù),但能夠通過(guò)數(shù)據(jù)前面驗(yàn)證數(shù)據(jù)的未被篡改,本文給大家介紹了如何使用Java生成JWT令牌,需要的朋友可以參考下
    2024-04-04
  • Java中keytool的使用

    Java中keytool的使用

    Keytool 是一個(gè)JAVA環(huán)境下的安全鑰匙與證書(shū)的管理工具,Keytool將密鑰(key)和證書(shū)(certificates)存在一個(gè)稱為keystore 的文件(受密碼保護(hù))中,本文重點(diǎn)給大家介紹keytool的使用,感興趣的朋友一起看看吧
    2022-02-02

最新評(píng)論

华阴市| 西吉县| 鹤壁市| 轮台县| 金秀| 新郑市| 安西县| 阿勒泰市| 长治县| 庆安县| 济源市| 四会市| 微山县| 保德县| 襄汾县| 五家渠市| 靖州| 若羌县| 临湘市| 芦溪县| 双鸭山市| 星座| 陆川县| 横峰县| 普兰店市| 泸西县| 蒙城县| 清流县| 临泽县| 武陟县| 法库县| 德庆县| 泽普县| 宜昌市| 上虞市| 托克逊县| 陆川县| 阿图什市| 叶城县| 荣昌县| 基隆市|