我们知道在 Spring Boot 中可以用一个 @Configuration 配置文件来配置所有 Bean 及其他配置(不会的看这篇文章:Spring零配置之@Configuration注解详解),但其实没必要这么做。

我们可以把相关的配置独立出来,放到多个 @Configuration 中,如以下参考:

  • MainConfiguration:项目主要配置
  • DataSoureceConfiguration:数据源配置
  • RedisConfiguration:Redis配置
  • MongoDBConfiguration:MongoDB配置

这时候 @Import 注解就能派上用场了,来看下它的源码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import { /**
* {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar}
* or regular component classes to import.
*/
Class<?>[] value(); }

可以导入这三类注册文件:

  • Configuration
  • ImportSelector
  • ImportBeanDefinitionRegistrar

第一个已经讲过了,其他两个后面会讲,关注Java技术栈微信公众号,获取第一时间推送。

先来看一个 @Import 示例,直接导入其他配置文件:

@Configuration
@Import({ RedisConfiguration.class })
public class MainConfiguration {
// ...
}

当然,如果这些配置文件都在类扫描路径下,不用 @Import 导入注解,直接用 @ComponentScan 也能搞定,这个默认的 @SpringBootApplication 注解就包含了,不需要再重复加。

再者,@Enable* 注解也能派上用场:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(RedisConfiguration.class)
public @interface EnableRedis {
}

具体可以参考这篇文章:Spring Enable*高级应用及原理,另外,关注Java技术栈微信公众号,在后台回复:spring,可以获取更多 Spring 干货。

那么问题来了,老项目想用 Spring Boot 框架,但还有大量的 XML 配置文件,很难迁移到 @Configuration 配置文件里面来,怎么处理?

栈长继续给你支招!

答案就是:@ImportResource 注解,来看下它的源码:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface ImportResource { @AliasFor("locations")
String[] value() default {}; @AliasFor("value")
String[] locations() default {}; Class<? extends BeanDefinitionReader> reader() default BeanDefinitionReader.class; }

@ImportResource 可以指定要导入的 XML 配置文件的路径,还能指定自定义的 BeanDefinitionReader

来一个示例,导入一个类路径下的 XML 配置文件:

@Configuration
@ImportResource("classpath:config/spring-mvc.xml")
public class MainConfiguration {
// ...
}

获取所有 Spring Boot 示例代码,请关注微信公众号 "Java技术栈" 在后台回复关键字:bootcode

通过本文的介绍,可以看出来 Spring Boot 现在对原有的 Spring MVC 传统项目是支持的非常好的,不管是 Servlet,还是 XML 配置文件,都可以轻松集成。

上面说的这些注解在《Spring Boot 最核心的 25 个注解》文章中都有说明,后面会逐步分解开来,关注Java技术栈微信公众号,获取第一时间推送。

最新文章

  1. u3d_Shader_effects笔记6 第二章 animating sprite
  2. js框架设计1.3数组化
  3. nginx php rewrite配置
  4. document.write 摘抄
  5. bug-android之ActivityNotFoundException
  6. 学习Hadoop不错的系列文章
  7. 擦亮自己的眼睛去看SQLServer之简单Insert(转)
  8. 直接下载Google Play市场的APK
  9. c语言typedef关键字的理解
  10. linux shell read command-Getting User Input Via Keyboard--ref
  11. 四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法
  12. 批处理判断是BIOS还是UEFI启动
  13. kdump简单的介绍
  14. RobotFrameWork接口项目分层及通用控制方式
  15. CentOS 6.5环境下heartbeat高可用集群的实现及工作原理详解
  16. 【Spark】榨干Spark性能-driver、exector内存突破256M
  17. textmate常用快捷键备忘
  18. Source not found :Edit Source Lookup Path 解决方案
  19. 02_Netty实现的Echo服务器和客户端
  20. nginx 查看当前的连接数

热门文章

  1. nodejs vue的安装
  2. nodejs npm vue yarn 环境搭建
  3. 如何将一个div盒子水平垂直都居中?
  4. 记Html的初次接触
  5. python可视化_matplotlib
  6. Mac OS 查看端口和杀死进程
  7. k8s之StatefulSet介绍(六)
  8. Linux 环境变量配置错误,导致所有命令找不到
  9. VUE 动态菜单管理
  10. linux 使用ssh-keygen生成ssh公钥和私钥