SpringBoot的幕后推手,我在美团Java研发岗工作的那5年




JavaConfig的配置方式如下:



@Configuration

public class DemoConfiguration {

// bean定义

}




> 也就是说任何一个被标注了`@Configuration`注解的Java类都是一个JavaConfig配置类。



**2\. 注册bean定义**



XML配置方式:



...



JavaConfig配置方式:



@Configuration

public class DemoConfiguration {

@Bean

public DemoService demoService() {

    return new DemoServiceImpl();

}

}




> 也就是说任何一个标注了`@Bean`注解的方法,它的返回值就将作为一个bean定义注册到Spring的IoC容器,方法名将默认成为该bean在容器中的id.



**3\. 表达依赖注入关系**



XML配置形式:



<property name="dependencyService" ref="aService"/>



JavaConfig形式:



@Configuration

public class DemoConfiguration {

@Bean

public AService aService() {

    return new AServiceImpl();

}

@Bean

public BService bService() {

    return new BServiceImpl(aService());

}

}




> 也就是说如果一个bean定义了依赖其他bean,就直接调用其对应JavaConfig类中依赖bean的创建方法即可。



从以上种种表象我们可以看出,以前Spring IoC容器中具有的特性在JavaConfig中都可以进行表述,只是换了另外的一种形式而已。并且通过声明相应的Java Annotation反而“内聚”一起了,变得更加简洁了。



### 五、那些常用的Annotation



1. **`@ComponentScan`**



​  该注解对应的是XML配置中的`<context:component-scan>`元素,用于配合一些元信息Java Annotation,比如`@Component`和`@Repository`等,将标注了这些注解的bean定义类批量采集到Spring的IoC容器中。



​  我们可以通过basePackage等属性来细粒度的定制该注解自动扫描的范围,如果没有指定的话,则默认Spring框架会从声明`@ComponentScan`注解所在的类的package进行扫描



​  这里还要说的`@ComponentScan`是SpringBoot框架得以实现的一个重要组件,我们以后还能在碰到它,也会做深入讲解。



**2. **`@PropertySource`**和`@PropertySources`**



​  注解`@PropertySource`用来从指定的地方来加载`.properties`配置文件,并且将其中的属性加载到IoC容器中,以便我们能用来填充一些bean定义的属性占位符(placeholder),当然它的实现需要PropertySourcesPlaceHolderConfigurer的配合。



  若我们使用Java8或者更高的版本,那么我们可以并行声明多个`@PropertySource`,如:



@Configuration

@PropertySource(“classpath:1.properties”)

@PropertySource(“classpath:2.properties”)

@PropertySource("…")

public class XConfiguration {

...

}




  若我们使用低于Java8版本的JDK进行开发Spring应用,我们就必须借助`@PropertySources`注解来实现声明多个`@PropertySource`了,如下:



@Configuration

@PropertySources({

@PropertySource("classpath:1.properties"),

@PropertySource("classpath:2.properties"),

...

})

public class XConfiguration {

...

}




**3.** **`@Import`和`@ImportSource`**



  在以前XML配置方式中,我们可以通过`<import resource="xxx.xml"/>`来将多个分开的容器配置合并到一个配置中,在JavaConfig形式的配置中,我们可以使用`@Import`这个注解完成同样的目的:



@Configuration

@Import(DemoConfiguration.class)

public class XConfiguration {

...

}




  注解`@Import`只能将以JavaConfig形式定义的配置引入到IoC容器,而若我们有一些以前遗留的配置或者遗留的系统需要以XML形式来配置(如Dubbo框架),我们就需要使用`@ImportSource`注解来将它们一起合并到以JavaConfig配置形式配置的容器中:



@Configuration

@Import

@ImportSource(…)

public class XConfiguration {

最后

送大家一个小福利,点击领取Java全套进阶资料

:


@Configuration

@Import

@ImportSource(...)

public class XConfiguration {



# 最后

**[送大家一个小福利,点击领取Java全套进阶资料](https://gitee.com/vip204888/java-p7)**

[外链图片转存中...(img-ontFYlcY-1628419433198)]

[外链图片转存中...(img-tfcq0jxd-1628419433199)]

![](https://img-blog.csdnimg.cn/img_convert/75d03bc41b86865b384048958c2070a0.png)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值