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 {
最后
:
@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)