Spring注解之@Bean 用法介紹


     注解 @Bean是一個方法級別的注解,主要用在@Configuration注解的類里,也可以用在@Component注解的類里。添加的bean的id為方法名。

定義Bean

      下面摘錄@Configuration里的一個定義Bean的實例:

@Configuration public class AppConfig { @Bean public TransferService transferService() { return new TransferServiceImpl(); } }

這個配置就等同於如下xml里配置:

<beans>
<bean id="transferService" class="com.acme.TransferServiceImpl"/>
</beans>

Bean的依賴

     @Bean 也可以依賴其他任意數量的Bean,如果TransferService 依賴 AccountRepository,我們可以通過方法參數實現這個依賴

@Configuration public class AppConfig { @Bean public TransferService transferService(AccountRepository accountRepository) { return new TransferServiceImpl(accountRepository); } }

自定義Bean的別名

     默認情況下bean的名稱和方法名稱相同,下面使用name屬性來指定。創建BeanTest類:

package com.eg.wiener.config; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; @Service public class BeanTest { @Bean("myBeanObj") public BeanTest getBeanObj() { BeanTest bean = new BeanTest(); System.out.println("調用方法:" + bean); return bean; } }

     通過下面的方法可以定義多個別名:

@Bean(name = { "myBeanObj", "myBeanObj1", "beanObj" })

     在啟動Spring Boot項目時,我們通過run()方法返回的ApplicationContext對象獲取我們想要的Bean:

    private static ApplicationContext applicationContext; public static void main(String[] args) { applicationContext = SpringApplication.run(WienerApplication.class, args); Object bean1 = applicationContext.getBean("myBeanObj"); System.out.println(String.format("打印bean1 %s", bean1)); bean1 = applicationContext.getBean("myBeanObj"); System.out.println(String.format("打印bean2 %s", bean1)); }

     項目啟動后,在日志中可以發現如下三條記錄:

調用方法:com.eg.wiener.config.BeanTest@53311681 打印bean1 com.eg.wiener.config.BeanTest@53311681 打印bean2 com.eg.wiener.config.BeanTest@53311681

說明定義別名成功。

Bean的描述

     提供函數的詳細描述信息對開發而言十分重要,bean的描述可以使用 @Description來提供。

@Bean("myBeanObj") @Description("請添加必要的描述消息") public BeanTest getBeanObj() { BeanTest bean = new BeanTest(); System.out.println("調用方法:" + bean); return bean; }

Reference

 https://www.cnblogs.com/feiyu127/p/7700090.html

 

 


免責聲明!

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



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