Spring Boot及其模块提供的Bean列表查询及相关使用疑问
哈哈,这个问题太戳中痛点了——我当初刚上手Spring Boot的时候,也经常莫名其妙重复造轮子,直到后来才发现很多需求官方早就通过自动配置给咱准备好了!
有没有官方的Spring Boot模块Bean列表?
当然有,而且不止一种方式能获取:
1. 官方文档的自动配置说明
Spring Boot的官方文档里,每个Starter对应的章节都会列出它自动配置的核心Bean。比如:
- 针对Jackson,
spring-boot-starter-json对应的自动配置类JacksonAutoConfiguration,会自动注册ObjectMapper、Jackson2ObjectMapperBuilder等Bean; - 针对Spring JMS,
spring-boot-starter-jms对应的JmsAutoConfiguration,会注册ConnectionFactory、JmsTemplate、JmsListenerContainerFactory等常用Bean。
这些文档里还会标注每个Bean的可配置属性,比如Jackson的spring.jackson.date-format、JMS的spring.jms.template.default-destination。
2. 用Actuator的/beans端点实时查看
这是最直接的方式——给项目加上Actuator依赖:
<!-- Maven --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
然后在配置文件里暴露beans端点:
# application.properties management.endpoints.web.exposure.include=beans
启动项目后访问http://localhost:8080/actuator/beans,就能看到应用中所有注册的Bean,包括:
- Bean的名称、类型
- 所属的配置类(比如
JacksonAutoConfiguration) - 依赖的其他Bean
- 作用域(单例/原型等)
这个列表是实时的,能帮你快速确认某个Bean是否已经被自动配置了。
怎么主动发现这些Bean,避免重复造轮子?
分享几个我平时用的方法:
- 直接查看自动配置类源码:在IDEA里,按住Ctrl点击Starter依赖里的自动配置类(比如
JmsAutoConfiguration),就能看到里面定义的所有Bean,以及它们的条件注解(比如@ConditionalOnMissingBean——意思是如果没有自定义的同类型Bean,才会自动配置)。比如你如果自己定义了JmsTemplate,Spring Boot的自动配置版本就不会生效了。 - 用IDEA的Spring Boot Dashboard:打开IDEA的Spring Boot视图,里面有个「Beans」标签,能直观展示所有注册的Bean,还能按类型、名称过滤。比如搜「Jms」就能快速找到所有JMS相关的Bean,一目了然。
- 关注配置属性提示:在application.properties/yml里,输入
spring.jms.或者spring.jackson.,IDEA会自动提示所有可配置的属性,从这些属性也能反向推断出哪些Bean是可以被配置的,进而知道它们的存在。
举个实际例子
比如你提到的Jackson ObjectMapper:Spring Boot自动配置的jacksonObjectMapper已经帮你做了很多默认配置,比如解析日期为yyyy-MM-dd HH:mm:ss,处理空值时忽略null字段等。你完全可以直接注入使用:
@Autowired private ObjectMapper objectMapper;
如果需要自定义,也不用重新new,而是通过Jackson2ObjectMapperBuilderCustomizer来修改默认配置,或者用spring.jackson.*配置项调整,比如:
spring.jackson.date-format=yyyy/MM/dd spring.jackson.serialization.write-null-map-values=false
对于Spring JMS,自动配置的JmsTemplate可以直接注入发送消息,JmsListenerContainerFactory则支持@JmsListener注解监听消息,这些都不用自己手动配置,省了超多代码!
内容的提问来源于stack exchange,提问作者MiseryMachine

