注解 @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

Spring注解之@Bean 用法介绍的更多相关文章

  1. (转)Spring注解完成Bean的定义

    使用Spring注解完成Bean的定义 2010-04-21 16:48:54|  分类: spring|举报|字号 订阅     下载LOFTER客户端     通过@Autowired或@Reso ...

  2. 使用spring注解——定义bean和自动注入

    对于java bean的定义和依赖配置,使用xml文件真心是不方便. 今天学习如何用注解,解决bean的定义和注入. 常用注解: 1.自动注入:@Resources,@Autowired 2.Bean ...

  3. 在Servlet中获取Spring注解的bean

    最近由于项目中出现了Servlet调用Spring的bean,由于整个项目中所有的bean均是注解方式完成,如@Service,@Repository,@Resource等,但是Spring的容器管理 ...

  4. Spring 注解配置Bean

    一.使用注解配置Bean 1.注解 在类定义.方法定义.成员变量定义前使用.其简化<bean>标签,功能同<bean>标签.格式为: @注解标记名. 2.组件扫描 Spring ...

  5. 单元测试使用spring注解获取bean

    在实际项目开发中经常会有单元测试,单元测试中经常会用类似这样的代码片段获取spring管理的bean @Test public void testSendEmail(){ MessageService ...

  6. 5.spring:注解配置 Bean

    在classpath中扫描组件 组键扫描:能够从classpath下自动扫描,侦测和实例化具有特定注解的组件 特定的组件包括: ->@Componment:基于注解,标识一个受Spring管理的 ...

  7. 【Spring Framework】Spring注解设置Bean的初始化、销毁方法的方式

    bean的生命周期:创建---初始化---销毁. Spring中声明的Bean的初始化和销毁方法有3种方式: @Bean的注解的initMethod.DestroyMethod属性 bean实现Ini ...

  8. spring 注解注入bean

    通过注解方式注入bean,需要在配置类下注入bean 第一步,配置扫描文件夹 首先要在spring.xml中配置需要扫描的配置类 <context:componenet-scan base-pa ...

  9. spring注解value的用法

    spring@value注解可以获取配置的*.properties中的值 具体见

  10. Spring注解@Conditional相关用法

    1.@Conditional注解 @Conditional 是Spring4新提供的注解. 它的作用是按照一定的条件进行判断,满足条件给容器注册bean,否则不注入. 可以作用在方法上,也可以作用在类 ...

随机推荐

  1. k8s dashboard token 生成/获取

    创建示例用户 在本指南中,我们将了解如何使用 Kubernetes 的服务帐户机制创建新用户.授予该用户管理员权限并使用与该用户绑定的承载令牌登录仪表板. 对于以下每个和的代码片段ServiceAcc ...

  2. 如何限制goroutine的数量

    为什么要控制goroutine的数量? 在我们开发过程中,如果不对goroutine加以控制而进行滥用的话,可能会导致服务整体崩溃.比如耗尽系统资源导致程序崩溃,或者CPU使用率过高导致系统忙不过来. ...

  3. SeaBIOS实现简单分析

    SeaBIOS是一个16bit的x86 BIOS的开源实现,常用于QEMU等仿真器中使用.本文将结合SeaBIOS Execution and code flow和SeaBIOS的源码对SeaBIOS ...

  4. 解决 Docker 日志文件太大的问题

    Docker 在不重建容器的情况下,日志文件默认会一直追加,时间一长会逐渐占满服务器的硬盘的空间,内存消耗也会一直增加,本篇来了解一些控制日志文件的方法. 清理单个文件 运行时控制 全局配置 Dock ...

  5. 选择排序--java进阶day06

    1.选择排序 https://kdocs.cn/l/ciMkwngvaWfz?linkname=150996881 了解了选择排序之后,我们来找其中的规律 2.规律 选择排序就是一个元素和数组后续元素 ...

  6. study Rust-5【Slice】

    另一个没有所有权的数据类型是 slice.slice 允许你引用集合中一段连续的元素序列,而不用引用整个集合. [字符串Slice熟悉掌握的很勉强,通过动手来进步加深认识] 字符串slice let ...

  7. luat编程MQTT的自动重连失败分析

    正确用法 查看代码 --- 模块功能:MQTT客户端处理框架 -- @author openLuat -- @module mqtt.mqttTask -- @license MIT -- @copy ...

  8. 基于XML的方式配置AOP

    第一步:把通知类用 bean 标签配置起来 <bean id="txManager" class="com.atguigu.account.utils.Transa ...

  9. Hystrix两种隔离方式对比

    ​在微服务架构中,我们不可避免的与Hystrix打交道,最近在面试过程中,也总是被问到Hystrix两种熔断方式的区别,今天,就给大家做个小结. 首先,Hystrix熔断方式主要有两种: 线程池隔离 ...

  10. app自动化的特殊操作

    一.截屏 File srcfile=driver.getScreenshotAs(OutputType.FILE); //得到截图源文件对象 File dstfile=new File("C ...