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
读后有收获,小礼物走一走,请作者喝咖啡。

作者:楼兰胡杨
本文版权归作者和博客园共有,欢迎转载,但请注明原文链接,并保留此段声明,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南