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
Spring注解之@Bean 用法介绍的更多相关文章
- (转)Spring注解完成Bean的定义
使用Spring注解完成Bean的定义 2010-04-21 16:48:54| 分类: spring|举报|字号 订阅 下载LOFTER客户端 通过@Autowired或@Reso ...
- 使用spring注解——定义bean和自动注入
对于java bean的定义和依赖配置,使用xml文件真心是不方便. 今天学习如何用注解,解决bean的定义和注入. 常用注解: 1.自动注入:@Resources,@Autowired 2.Bean ...
- 在Servlet中获取Spring注解的bean
最近由于项目中出现了Servlet调用Spring的bean,由于整个项目中所有的bean均是注解方式完成,如@Service,@Repository,@Resource等,但是Spring的容器管理 ...
- Spring 注解配置Bean
一.使用注解配置Bean 1.注解 在类定义.方法定义.成员变量定义前使用.其简化<bean>标签,功能同<bean>标签.格式为: @注解标记名. 2.组件扫描 Spring ...
- 单元测试使用spring注解获取bean
在实际项目开发中经常会有单元测试,单元测试中经常会用类似这样的代码片段获取spring管理的bean @Test public void testSendEmail(){ MessageService ...
- 5.spring:注解配置 Bean
在classpath中扫描组件 组键扫描:能够从classpath下自动扫描,侦测和实例化具有特定注解的组件 特定的组件包括: ->@Componment:基于注解,标识一个受Spring管理的 ...
- 【Spring Framework】Spring注解设置Bean的初始化、销毁方法的方式
bean的生命周期:创建---初始化---销毁. Spring中声明的Bean的初始化和销毁方法有3种方式: @Bean的注解的initMethod.DestroyMethod属性 bean实现Ini ...
- spring 注解注入bean
通过注解方式注入bean,需要在配置类下注入bean 第一步,配置扫描文件夹 首先要在spring.xml中配置需要扫描的配置类 <context:componenet-scan base-pa ...
- spring注解value的用法
spring@value注解可以获取配置的*.properties中的值 具体见
- Spring注解@Conditional相关用法
1.@Conditional注解 @Conditional 是Spring4新提供的注解. 它的作用是按照一定的条件进行判断,满足条件给容器注册bean,否则不注入. 可以作用在方法上,也可以作用在类 ...
随机推荐
- winform控件 datagridview分页功能 界面实现需要有上一页下一页等操作控件 dataGridView1 控件的数据绑定方式 如何实现分页中的数据修改然后进行保存 请列出详细例子 特别保存部分
以下提供一个示例来说明如何在 WinForms 中实现分页功能,并在分页中实现数据修改并保存的操作. 首先,我们需要一个包含数据源的 DataGridView 控件,并添加上一页.下一页等操作控件来实 ...
- Kubernetes鉴权资源 —— SubjectAccessReview详解
1.概述 在 Kubernetes 集群中,授权(Authorization) 是保障安全的核心机制之一.无论是用户.ServiceAccount 还是自动化工具,对资源的操作都需要经过严格的权限控制 ...
- Ethernet协议和ARP协议分析
实验介绍: 在信息的传输中,协议至关重要. 使用的实验环境是 kali 2017.arp协议还需要用到靶机centos7 如果是kali的其他版本可能会导致无法抓包. 一:网络分析工具(kali) S ...
- python 如何生成exe程序
cmd 安装包 pip install pyinstaller cd 进入程序文件夹内 3.输入命令pyinstaller -F xx.py 在dist文件夹下找到安装包即可
- MongoDB 简单介绍
MongoDB介绍 疑问 解答 什么是 MongoDB 一个以 JSON 为数据模型的文档数据库 为什么叫文档数据库? 文档来自于 "JSON Document",并非我们一般理解 ...
- 变速精灵+百D网盘
首先找一下相对低一点版本的客户端,比如7.26.10 https://issuepcdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_7.26 ...
- Nerf和3DGS神经重建技术在自动驾驶模拟中的应用
验证自动驾驶软件需要数百万公里的测试.这不仅意味着系统开发周期长,而且系统的复杂度也会不断增加,同时,大规模的实车测试也会耗费巨量的资源并且可能会面临未知的安全问题.aiSim这样的虚拟仿真工具可以减 ...
- Win10远程桌面连接功能
Win10远程桌面连接功能 Win10系统自带的远程桌面连接需要满足以下三个条件 开启远程桌面连接 设置一个连接密码 知道自己的IP地址 下面教你如开开启远程设置 第一步:在桌面我的电脑图片上单机属性 ...
- Python日志模块Logging使用指北
Python日志模块Logging使用指北 作者:SkyXZ CSDN:SkyXZ--CSDN博客 博客园:SkyXZ - 博客园 Logging模块是Python中一个很重要的日志模块,它提供了灵活 ...
- Linux内核中块层上的多队列
如果你想知道SSD为什么使用多队列,可以看看这篇文章:https://kernel.dk/blk-mq.pdf 1. 多块层 以下关于多队列层的总结来自 The Multi-Queue Interfa ...