Spring三种配置方式的混合和迁移

    一、配置兼容

        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 配置的容器使用ClassPathXmlApplicationContextFileSystemXmlApplicationContext实例化。

基于注解配置的容器使用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属性 @Beanvaluename属性
<bean>scope属性 @Scope
<bean>depends-on属性 @DependsOn
<bean>lazy-init属性 @Lazy
<bean>primary属性 @Primary
<bean>init-method属性 @BeaninitMethod属性
<bean>destroy-method属性 @BeandestroyMethod属性

表格可以左右滑动

三、附录

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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!