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

Spring @Bean注解的使用場(chǎng)景與案例實(shí)現(xiàn)

 更新時(shí)間:2023年03月10日 08:59:02   作者:Super_Leng  
隨著SpringBoot的流行,我們現(xiàn)在更多采用基于注解式的配置從而替換掉了基于XML的配置,所以本篇文章我們主要探討基于注解的@Bean以及和其他注解的使用

一、簡(jiǎn)單介紹

翻看Spring的源碼時(shí),發(fā)現(xiàn)@Bean注解的源碼上標(biāo)注了Since: 3.0,也就是說(shuō),@Bean注解是Spring從3.0版本開(kāi)始提供的源碼。@Bean注解可以標(biāo)注在方法上,將當(dāng)前方法的返回值注入到IOC容器中,也可以標(biāo)注到注解上,作為元注解使用。

二、注解說(shuō)明

@Bean注解可以說(shuō)是使用Spring開(kāi)發(fā)應(yīng)用程序時(shí),使用的比較多的一個(gè)注解,尤其是基于SpringBoot開(kāi)發(fā)應(yīng)用程序時(shí),@Bean注解使用的就很多了。@Bean注解可以標(biāo)注到方法上,將當(dāng)前方法的返回值注入到IOC容器中。@Bean注解也可以標(biāo)注到注解上,作為元注解使用。

1. 注解源碼

/**
 * @author Rod Johnson
 * @author Costin Leau
 * @author Chris Beams
 * @author Juergen Hoeller
 * @author Sam Brannen
 * @since 3.0
 */
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {
 //Since: 4.3.3
 @AliasFor("name")
 String[] value() default {};
 @AliasFor("value")
 String[] name() default {};
    //Since: 5.1
 boolean autowireCandidate() default true;
 String initMethod() default "";
 String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;
}

從@Bean源碼的注釋可以看出,@Bean注解是Spring從3.0版本開(kāi)始提供的注解,注解中各個(gè)屬性的含義如下所示:

  • name:String[]數(shù)組類型,指定注入到IOC容器中的Bean的名稱,可以指定多個(gè)名稱。如果不指定name屬性和value屬性的值,則注入到IOC容器中的Bean的名稱默認(rèn)是方法的名稱。
  • value:String[]數(shù)組類型,從Spring 4.3.3版本開(kāi)始提供的@Bean的屬性,作用與name屬性相同。
  • autowireCandidate:boolean類型,表示是否支持自動(dòng)按照類型注入到其他的Bean中。此屬性會(huì)影響@Autowired注解,不會(huì)響應(yīng)@Resource注解,默認(rèn)為true,表示支持自動(dòng)按照類型注入到其他的Bean中。
  • initMethod:指定初始化的方法。
  • destroyMethod:指定銷毀的方法。

2. 注解使用場(chǎng)景

在使用Spring的注解開(kāi)發(fā)應(yīng)用程序時(shí),如果是我們自己開(kāi)發(fā)的類,可以在類上標(biāo)注@Component注解(也可以是@Repository、@Service、@Controller等注解),將類注入到IOC容器中。但是,有時(shí)很多類不是我們自己寫(xiě)的,而是依賴的第三方的類庫(kù),此時(shí)就無(wú)法在類上標(biāo)注@Component等注解了,此時(shí)就需要使用@Bean注解將其注入到IOC容器中。

也就是說(shuō),@Bean注解適用于將第三方提供的類注入到IOC容器中的場(chǎng)景。使用@Bean注解創(chuàng)建的Bean對(duì)象默認(rèn)是單實(shí)例Bean對(duì)象。

三、使用案例

1. 案例描述

使用@Bean注解將User類的對(duì)象注入到IOC容器中,打印初始化和銷毀方法,并驗(yàn)證使用@Bean注解創(chuàng)建的Bean對(duì)象默認(rèn)是單實(shí)例Bean。

2. 案例實(shí)現(xiàn)

使用@Bean注解可以將類對(duì)象注入到IOC容器中,并且@Bean注解的initMethod屬性可以指定初始化的方法,destroyMethod屬性可以指定銷毀的方法。當(dāng)IOC容器對(duì)Bean對(duì)象進(jìn)行初始化時(shí),會(huì)執(zhí)行@Bean注解的initMethod屬性指定的方法,當(dāng)IOC容器在關(guān)閉時(shí),會(huì)執(zhí)行@Bean注解的destroyMethod屬性指定的方法,觸發(fā)銷毀方法的邏輯。

注意:上述邏輯僅限于注入到IOC容器中的單例Bean對(duì)象。如果是單實(shí)例Bean,則IOC容器啟動(dòng)時(shí),就會(huì)創(chuàng)建Bean對(duì)象,IOC容器關(guān)閉時(shí),銷毀Bean對(duì)象。如果是多實(shí)例Bean,IOC容器在啟動(dòng)時(shí),不會(huì)創(chuàng)建Bean對(duì)象,在每次從IOC容器中獲取Bean對(duì)象時(shí),都會(huì)創(chuàng)建新的Bean對(duì)象返回,IOC容器關(guān)閉時(shí),也不會(huì)銷毀對(duì)象。也就是說(shuō),如果是多實(shí)例Bean,IOC容器不會(huì)管理Bean對(duì)象。

本節(jié),就以單實(shí)例Bean為例來(lái)實(shí)現(xiàn)案例程序,具體的實(shí)現(xiàn)步驟如下所示:

新建注入到IOC容器中的User類

public class User {
    private final Logger logger = LoggerFactory.getLogger(User.class);
    public User(){
        logger.info("執(zhí)行構(gòu)造方法...");
    }
    public void init(){
        logger.info("執(zhí)行初始化方法...");
    }
    public void destroy(){
        logger.info("執(zhí)行銷毀方法...");
    }
}

IOC容器啟動(dòng)時(shí),會(huì)創(chuàng)建User類的對(duì)象并調(diào)用init()方法進(jìn)行初始化。IOC容器關(guān)閉時(shí),會(huì)銷毀User類的對(duì)象,并調(diào)用destroy()方法執(zhí)行銷毀邏輯。

可以看到,User類的實(shí)現(xiàn)比較簡(jiǎn)單,提供了一個(gè)無(wú)參構(gòu)造方法,一個(gè)表示初始化的init()方法和一個(gè)表示銷毀的destroy()方法,每個(gè)方法中都打印了相應(yīng)的日志來(lái)說(shuō)明調(diào)用了對(duì)應(yīng)的方法。

創(chuàng)建Spring的配置類BeanConfig

@Configuration
@ComponentScan(basePackages = "com.lwk.demo.spring.annocation.bean")
public class BeanConfig {
    @Bean(initMethod = "init", destroyMethod = "destroy")
    public User user(){
        return new User();
    }
}

可以看到,在BeanConfig類上標(biāo)注了@Configuration注解,說(shuō)明BeanConfig類是一個(gè)Spring的配置類,并且在BeanConfig類上標(biāo)注了@ComponentScan注解,指定要掃描的包為com.lwk.demo.spring.annocation.bean。

在BeanConfig類中定義了一個(gè)user()方法,返回一個(gè)User對(duì)象。在user()方法上標(biāo)注了@Bean注解,并通過(guò)initMethod屬性指定的初始化方法為User類的init()方法,通過(guò)destroyMethod屬性指定的銷毀方法為User類的destroy()方法。

創(chuàng)建案例測(cè)試類BeanTest

public class BeanTest {
    private static final Logger LOGGER = LoggerFactory.getLogger(BeanTest.class);
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanConfig.class);
        LOGGER.info("IOC容器啟動(dòng)完成....");
        User user1 = context.getBean(User.class);
        User user2 = context.getBean(User.class);
        LOGGER.info("user1是否等于user2===>>>{}", (user1 == user2));
        context.close();
    }
}

可以看到,在BeanTest類中,通過(guò)BeanConfig配置類創(chuàng)建了IOC容器,從IOC容器中兩次獲取User對(duì)象,分別賦值給user1和user2,打印user1是否等于user2的日志,并關(guān)閉IOC容器。

3. 案例測(cè)試

運(yùn)行BeanTest類的main()方法,輸出的日志信息如下所示:

15:56:57.404 [main] INFO com.lwk.demo.spring.annocation.bean.entity.User - 執(zhí)行構(gòu)造方法...
15:56:57.405 [main] INFO com.lwk.demo.spring.annocation.bean.entity.User - 執(zhí)行初始化方法...
15:56:57.431 [main] INFO com.lwk.demo.spring.annocation.bean.BeanTest - IOC容器啟動(dòng)完成....
15:56:57.432 [main] INFO com.lwk.demo.spring.annocation.bean.BeanTest - user1是否等于user2===>>>true
15:56:57.437 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@41975e01, started on Thu Mar 09 15:56:57 CST 2023
15:56:57.438 [main] INFO com.lwk.demo.spring.annocation.bean.entity.User - 執(zhí)行銷毀方法...

可以看到,IOC容器在啟動(dòng)時(shí),就創(chuàng)建了User對(duì)象,并調(diào)用了@Bean注解的initMethod方法指定的初始化方法,IOC容器在關(guān)閉時(shí),調(diào)用@Bean注解的destroyMethod屬性指定的銷毀方法。并且通過(guò)打印的user1是否等于user2的日志為true,可以說(shuō)明使用@Bean注解默認(rèn)創(chuàng)建的Bean對(duì)象是單實(shí)例Bean,每個(gè)類在IOC容器中只會(huì)存在一個(gè)單實(shí)例Bean對(duì)象。

到此這篇關(guān)于Spring @Bean注解的使用場(chǎng)景與案例實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Spring @Bean注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java工程mybatis實(shí)現(xiàn)多表查詢過(guò)程詳解

    Java工程mybatis實(shí)現(xiàn)多表查詢過(guò)程詳解

    這篇文章主要介紹了Java工程mybatis實(shí)現(xiàn)多表查詢過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Spring中的@PostConstruct注解使用詳解

    Spring中的@PostConstruct注解使用詳解

    這篇文章主要介紹了Spring中的@PostConstruct注解使用詳解,該注解被用來(lái)修飾一個(gè)非靜態(tài)的void方法,被@PostConstruct修飾的方法會(huì)在服務(wù)器加載Servlet的時(shí)候運(yùn)行,并且只會(huì)被服務(wù)器執(zhí)行一次,需要的朋友可以參考下
    2023-10-10
  • spring boot+redis 監(jiān)聽(tīng)過(guò)期Key的操作方法

    spring boot+redis 監(jiān)聽(tīng)過(guò)期Key的操作方法

    這篇文章主要介紹了spring boot+redis 監(jiān)聽(tīng)過(guò)期Key,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Spring表達(dá)式語(yǔ)言SpEL用法詳解

    Spring表達(dá)式語(yǔ)言SpEL用法詳解

    這篇文章主要介紹了spring表達(dá)式語(yǔ)言SpEL用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • mybatis-plus 如何配置邏輯刪除

    mybatis-plus 如何配置邏輯刪除

    這篇文章主要介紹了mybatis-plus 如何配置邏輯刪除,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • springboot中RestTemplate配置HttpClient連接池詳解

    springboot中RestTemplate配置HttpClient連接池詳解

    這篇文章主要介紹了springboot中RestTemplate配置HttpClient連接池詳解,這些Http連接工具,使用起來(lái)都比較復(fù)雜,如果項(xiàng)目中使用的是Spring框架,可以使用Spring自帶的RestTemplate來(lái)進(jìn)行Http連接請(qǐng)求,需要的朋友可以參考下
    2023-11-11
  • Apache?SkyWalking?修復(fù)TTL?timer?失效bug詳解

    Apache?SkyWalking?修復(fù)TTL?timer?失效bug詳解

    這篇文章主要為大家介紹了Apache?SkyWalking?修復(fù)TTL?timer?失效bug詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • java實(shí)現(xiàn)哈夫曼壓縮的實(shí)例

    java實(shí)現(xiàn)哈夫曼壓縮的實(shí)例

    這篇文章主要介紹了java實(shí)現(xiàn)哈夫曼壓縮的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Java?Valhalla?Project項(xiàng)目介紹

    Java?Valhalla?Project項(xiàng)目介紹

    這篇文章主要介紹了Java?Valhalla?Project項(xiàng)目介紹,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Java實(shí)現(xiàn)的Windows資源管理器實(shí)例

    Java實(shí)現(xiàn)的Windows資源管理器實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)的Windows資源管理器,實(shí)例分析了基于java實(shí)現(xiàn)windows資源管理器的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

临邑县| 凌源市| 荆门市| 桓台县| 邵阳县| 奇台县| 巨野县| 吉木萨尔县| 岢岚县| 普洱| 梁河县| 汾西县| 雷州市| 涿州市| 广西| 尉氏县| 龙山县| 界首市| 石柱| 乌鲁木齐县| 余姚市| 文化| 蓬莱市| 清水县| 高台县| 永州市| 汪清县| 三明市| 涟源市| 重庆市| 太谷县| 金坛市| 慈利县| 武定县| 馆陶县| 武胜县| 大同市| 正蓝旗| 故城县| 沁源县| 汶川县|