Spring核心——@Configuration与混合使用

本文深入探讨了Spring中的@Configuration注解,它相当于XML配置中的标签。文章讲解了@Configuration如何添加依赖,指出直接通过Java代码添加依赖依然遵循依赖注入原则。同时,介绍了@Component添加依赖的情况,以及@Configuration与@Component中使用@Bean的差异,并讨论了混合使用XML配置和Java配置的方式。最后,文章提到了Conditionally特性,用于条件判断是否添加Bean。
摘要由CSDN通过智能技术生成

@Configuration

在介绍Spring核心容器的系列文章中已经多次出现这个注解,从使用的角度来说可以把他理解为XML配置中的<beans>标签,但是两者肯定是不等价的。

在<beans>标签中除了使用<bean>声名Bean以外,还有各种<context>标签来扩展功能,比如<context:component-scan/>、<context:annotation-config />以及<import>等,这些扩展的功能并不是@Configuration注解的参数,而是通过另外一个注解来实现——@ComponentScan、@Import。

@Configuration的基本使用方法已经在纯Java运行与@Bean的“@Bean注解”部分介绍了使用方法,本篇在此基础上进一步进行说明。

@Configuration添加依赖

除了在纯Java运行与@Bean文中介绍的使用方法,我们还可以直接通过使用Java代码来添加依赖关系:

@Configuration
public class MyConfig {

    @Bean
    public Alice alice() {
        //直接使用方法注入数据。
        //从表面上看这里调用bob()并没有经过容器处理。而是直接使用了。
        return new Alice(bob());
    }

    @Bean
    public Bob bob() {
        return new Bob();
    }
}

看到这里,思维敏捷的码友通过以下逻辑肯定就发现问题了:

  1. 通过@Bean注解是向容器添加一个BeanDefinition
  2. 在所有的BeanDefinition创建之后容器开始创建Bean之前会执行预设的后置处理器BeanFactoryPostProcessor
  3. 最后容器根据BeanDefinition的内容创建Bean。
  4.  return new Alice(bob()); 这段代码中MyConfig::bob方法的调用看起来完全和容器无关,这样就违反了依赖注入的原则!
  5. 所以是不是Alice类中被注入的Bob实例根本就不是IoC容器中的Bob?

首先可以很负责的告诉码友们Spring并没有限制这个方式去添加Bean,所以例子中Alice类中的Bob实例就是IoC容器中的实例。即使是这样去注入Bean同样实现了依赖注入的功能。至于怎么解决的看完本文自然就能得到答案了。

@Component添加依赖

之前在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值