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