Spring spring

Spring中文网站 > Spring Boot > Spring Boot如何注入自定义类 Spring中注入Bean有几种方式
Spring Boot如何注入自定义类 Spring中注入Bean有几种方式
发布时间:2026/06/30 15:03:33

品牌型号:联想ThinkPad X1

系统:Windows10家庭版

软件版本:Spring 5.3.7

最近有位小伙伴反馈在重构老项目的时候踩了个小坑,有个工具类一直是手动new出来用的,现在想把它交给Spring管理,耗费许久才理清Bean注入并非只有@Autowired一种方案。其实Spring Boot里能往容器里塞Bean、再把它注入到别的类里的方法有很多种,每一种方式的使用场景都不太一样。有的适合简单的工具类,有的更适合第三方jar包里没法加注解的类。下面就给大家介绍一下Spring Boot如何注入自定义类,Spring中注入Bean有几种方式的相关内容。

一、Spring Boot如何注入自定义类

如果是我们自己写的类,想交给Spring来管理,常用的办法就是在类上加个@Component注解,或者用@Service、@Repository这些衍生注解,添加注解后,Spring启动扫描包时会自动识别该类并注册为容器Bean。

使用@Service注解
图1:使用@Service注解

这里要注意,这个类必须得放在Spring Boot主启动类能扫描到的包路径下,也就是主类所在包或者它的子包里,如果我们把这个类放在了别的模块、包路径对不上,扫描不到就会注入失败,项目启动的时候会报个找不到Bean的异常。

目录结构
图2:目录结构

如果出现这种找不到Bean的情况,检查并调整下包结构,要么就是用@ComponentScan注解去手动指定扫描路径基本上就可以解决。

@ComponentScan注解的使用
图3:@ComponentScan注解的使用

如果我们是要将自定义的类注入到别的类里用的时候,直接@Autowired修饰字段或者构造方法就行,这种方式适合自己写的、能改源码加注解的类。

二、Spring中注入Bean有几种方式

刚才说的@Component系列注解只是Spring注入Bean的其中一种方式,比较适合我们自己能改源码的类,如果是第三方jar包里的类,我们是没法在类上加注解的,这时候就得在配置类里用@Bean去手动声明,写一个方法返回这个类的实例,方法上加@Bean,Spring就会把返回值当成Bean管理起来。

用@Bean手动注入第三方类
图4:用@Bean手动注入第三方类

这种方式灵活度高,支持在方法内编写自定义初始化逻辑,适配需要传入参数配置的组件,比如数据库连接池、HTTP客户端这类。

创建数据库配置属性类
图5:创建数据库配置属性类

我们也可以用@Import注解直接把某个配置类或者普通类导入到当前配置里来,常用在做starter或者拆分配置模块的时候,把零散的配置类汇总到一起加载。

@Import注解的使用
图6:@Import注解的使用

有些小伙伴自己实现FactoryBean这个接口也是个办法,重写getObject()方法去控制Bean的创建过程,适合那种创建逻辑比较复杂、不是简单new一下就完事的场景,像MyBatis的SqlSessionFactoryBean就是这么干的。

实现FactoryBean
图7:实现FactoryBean

还有ApplicationContext.registerBean()或者BeanDefinitionRegistryPostProcessor,属于偏底层、运行时动态注册的方式,平时业务开发用得不算多,框架层面或者写starter的时候会涉及。

以上就是Spring Boot如何注入自定义类,Spring中注入Bean有几种方式的全部内容了。我们在开发的时候对于自己写的业务类,直接用@Component注解就可以了,如果引入的是第三方jar包,我们是没法去改源码的,那就在配置类里用@Bean手动声明。遇到那种创建过程比较复杂的,可以考虑通过实现FactoryBean接口这种方式来解决,平时在写代码的时候如果碰到注入失败的问题,可能是包路径没扫描到,或者注解用错了地方,排查的时候建议大家先从这两点入手基本能很快定位到问题。

180 1563 6924