Spring中@Configuration+@Bean定义Bean后为何需@Autowired注入?
关于Spring @Configuration、@Bean与依赖注入的疑问解答
核心逻辑先理清
@Configuration + @Bean 的作用只是把Bean实例注册到Spring IoC容器中——相当于告诉Spring:“这个类是配置类,里面的@Bean方法返回的对象要交给你管理”。但这并不意味着Spring会自动把这个Bean塞到任意类的变量里,你得明确告诉Spring“哪个变量需要填充这个Bean”。
为什么直接声明private MyBean myBean不行?
你在MyAnotherClass里写的private MyBean myBean;只是普通的Java变量定义,Spring根本不知道这个变量的存在,更不会主动去给它赋值。Spring的依赖注入(DI)是“按需触发”的,必须有明确的标记,Spring才会把容器里的Bean绑定到对应的变量上。
@Autowired的作用是什么?
@Autowired就是这个关键标记,它告诉Spring:“当初始化这个类的实例时,请从IoC容器里找到类型匹配的MyBean实例,把它赋值给这个变量”。没有这个注解,Spring对这个变量不会做任何处理,它的值会一直是null。
补充:不止@Autowired一种方式
除了@Autowired,你还可以用构造器注入(现在Spring官方更推荐这种方式),或者@Resource注解来实现注入,比如:
// 构造器注入示例 @Component public class MyAnotherClass { private final MyBean myBean; public MyAnotherClass(MyBean myBean) { this.myBean = myBean; } }
本质都是给Spring一个明确的信号:这个变量需要从容器中获取Bean实例。
总结
@Configuration负责Bean的注册,而依赖注入需要在使用Bean的类里通过注解(或构造器)明确声明,两者是Spring IoC体系中不同的环节,不能混为一谈。
内容的提问来源于stack exchange,提问作者user3396478
相关产品推荐
相关产品推荐

