一、配置兼容
1. 优先 XML 配置
2. 优先注解配置
二、迁移方案
1. XML 配置至注解配置
2. XML 配置至 Java 配置
三、附录
1. 配置属性
2. 常用注解
3. 示例代码
Spring 容器的配置方式有三种,在实际项目中,可能会遇到混合使用的情况,也可能需要从一种方式迁移到另一种方式。
一、配置兼容
Spring 的三种配置方式混合使用,需要兼容 XML 配置和注解配置。
1. 优先 XML 配置
在老的 Spring 项目中,常常会存在大量的 XML 配置,但并不影响我们使用注解配置的新特性。
XML 配置中使用注解配置
配置文件中使用 context:component-scan
来配置扫描的包路径。
该路径下的类就支持@Configuration
、@Component
和@Autowired
等注解。
<beans>
<context:component-scan base-package="cn.codeartist.spring.bean.mix"/>
</beans>
XML 配置中使用 Java 配置
扫描的包路径下使用@Configuration
定义配置类,在配置类中使用@Bean
注册 Bean。
2. 优先注解配置
老的 Spring 项目在迁移的过程中,可能需要在使用注解和 Java 的配置中,使用 XML 配置。
注解配置中使用 XML 配置
配置类上使用@ImportResource
来导入 XML 配置文件。
@Configuration
@ImportResource("classpath:bean.xml")
public class AppConfig {
}
classpath:bean.xml
表示基于 classpath 路径的资源文件。
注解配置中使用 Java 配置
直接在配置类中使用@Bean
注册 Bean。
@Configuration
@ComponentScan("cn.codeartist.spring.bean.mix")
public class AppConfig {
@Bean
public BeanExample beanExample() {
return new BeanExample();
}
}
或者在扫描的包路径下使用@Configuration
定义配置类。
二、迁移方案
基于 XML 配置的容器使用ClassPathXmlApplicationContext
或FileSystemXmlApplicationContext
实例化。
基于注解配置的容器使用AnnotationConfigApplicationContext
实例化。
// XML
public static void main(String[] args) {
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("bean.xml");
BeanExample beanExample = (BeanExample) applicationContext.getBean("beanExample");
}
// 注解
public static void main(String[] args) {
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(AppConfig.class);
BeanExample beanExample = (BeanExample) applicationContext.getBean("beanExample");
}
1. XML 配置至注解配置
配置文件中添加 context:component-scan
指定扫描的包路径。
2. XML 配置至 Java 配置
XML 配置中的<beans>
和<bean>
标签,等效于 Java 配置中的@Configuration
和@Bean
配置。
<beans>
<bean id="beanExample" class="cn.codeartist.spring.bean.mix.BeanExample"/>
</beans>
等效于:
@Configuration
public class AppConfig {
@Bean
public BeanExample beanExample() {
return new BeanExample();
}
}
属性对照
XML 配置和注解配置对应属性迁移。
XML配置 | 注解配置 |
---|---|
<context:component-scan> |
@ComponentScan |
<bean> 的id 属性 |
@Bean 的value 或name 属性 |
<bean> 的scope 属性 |
@Scope |
<bean> 的depends-on 属性 |
@DependsOn |
<bean> 的lazy-init 属性 |
@Lazy |
<bean> 的primary 属性 |
@Primary |
<bean> 的init-method 属性 |
@Bean 的initMethod 属性 |
<bean> 的destroy-method 属性 |
@Bean 的destroyMethod 属性 |
表格可以左右滑动
三、附录
1. 配置属性
属性 | 描述 |
---|---|
context:component-scan |
在基于 XML 配置容器中,指定扫描包路径 |
2. 常用注解
注解 | 描述 |
---|---|
@Configuration |
指定 Bean 的配置类 |
@ComponentScan |
(默认为类所在的包)指定包路径,该包下的类由容器管理 |
@Component |
指定该类由 Spring 容器管理 |
@ImportResource |
注解配置中导入 XML 配置文件 |
3. 示例代码
Gitee 仓库:
https://gitee.com/code_artist/spring
项目模块:
spring-ioc
示例路径:
cn.codeartist.spring.bean.mix
原文始发于微信公众号(CodeArtist):Spring三种配置方式的混合和迁移
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/138103.html