Spring的Xml和JavaConfig 扩展哪个好用

 更新时间:2021年05月26日 10:20:57   作者:java金融  
今天给大家介绍基于注解的Spring扩展,Spring的Xml和JavaConfig 扩展的配置方法,关于Spring的Xml和JavaConfig 扩展你会选哪个呢,带着这个问题一起通过本文学习下吧

引言

上一篇文章我们有怎么介绍到如何通过XML的形式来定义Spring的扩展《Spring面试高频题如何:自定义XML schema 扩展》,好多人都在吐槽现在都什么年代了,xml还有人再用吗?这玩意早就过时了吧,还有必要去掌握它吗?Spring官网都把这种方式放在最后面了,可想而知它的重要性到底怎样了?既然大家都吐槽了,那我们今天继续来介绍下基于注解的Spring扩展。

JavaConfig 配置扩展

从Spring3.0开始Spring提供了JavaConfig的方式可以用来代替以前XML的这种方式,原来在XML配置里的都可以通过注解来一一替换实现。主要通过@Configuration,@Bean, @Import,和@DependsOn这几个注解来搭配实现的。这种方式也是SpringBoot所使用的。

@Configuration

@Configuration只能标记在类上,表示该类为JavaConfig类,使其可以被Spring IOC容器扫描识别并创建Bean加入到容器中。@Configuration类就相当于以往的一个xml文件。下面我们看一个官网提供的例子:

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }

这个定义的JavaConfig就相当于原来如下XML的配置:

<beans>
    <bean id="myService" class="cn.javajr.services.MyServiceImpl"/>
</beans>

@Bean

@Bean只能被标记在方法上,表示该方法返回一个Spring Bean,可以被IOC容器托管,相当于以前在xml文件中写的元素。

  1. name:指定一个或者多个bean的名字,当没有设置name时,Spring容器会默认将@Bean方法名作为bean name,当设置了name后,就不会再使用方法名,同时设置多个name时,除第一个name外,其他的都会作为bean的别名。相当于xml配置中的name属性。
  2. initMethod:指定容器在初始化完bean后调用的方法。相当于xml配置中的init-method属性。
  3. destroyMethod:指定在容器在销毁bean前调用的方法。相当于xml配置中的 destroy-method。
  4. autowire:指定bean在自动装配时依赖注入使用的策略,取值可以参考Enum类Autowire 的三个常量:Autowire.BY_NAME,Autowire.BY_TYPE,Autowire.NO。

@Import

XML配置中的标签,基于JavaConfig提供了@Import来组合模块化的配置类,使用方式如下所示:

@Configuration()  
@Import({ApplicationContextConfig.class})  
public class ApplicationContextConfig {

上面就比较简单的介绍了几种通过JavaConfig注解来替换XML形式的注解,使用起来还是非常简单的,如果你有对以前的XML配置文件都比较了解的话,使用JavaConfig就更加简单方便了。

Dubbo的JavaConfig

上篇文章我们介绍了dubbo通过XML的方式自定义扩展,今天我们就接着看看dubbo是如何通过JavaConfig来替代XML形式的扩展的。
我们看看dubbo的服务提供者是如何通过注解来实现的

@Configuration
@EnableDubbo(scanBasePackages = "org.apache.dubbo.samples.annotation.impl")
@PropertySource("classpath:/spring/dubbo-provider.properties")
static class ProviderConfiguration {
}

@Configuration这个注解我们上面已经介绍过了,我们重点看下@EnableDubbo这个注解
@EnableDubbo 其实又是@EnableDubboConfig @DubboComponentScan是通过这两个组合注解来实现的,
@EnableDubboConfig注解实现如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Import(DubboConfigConfigurationRegistrar.class)
public @interface EnableDubboConfig {

这个注解使用了@Import(DubboConfigConfigurationRegistrar.class) 所以Spring 在处理
@EnableDubboConfig 注解 的时候就会去实例化DubboConfigConfigurationRegistrar
并且调用它的registerBeanDefinitions方法,这个方法主要是对propties文件进行解析并根据不同的配置
项生成对应类型的Bean对象。

总结

  • 通过基于XML和基于Java的配置扩展,可以使用户通过Spring使用我们研发的组件,提供很好的易用性。
  • 虽然现在大多数都是采用JavaConfig这种方式了,但是还是有人会比较喜欢xml这种方式
  • xml可以让配置集中化,所有的组件并不是分散的,因此使你对beans有一个很好的概览,比如mybais配置文件、SpingMvc配置文件,都放在一起,如果你需要分割文件,Spring可以帮你实现。然后(Spring)会通过内部标签进行重新组合或者外部上下文文件进行聚合。
  • xml和JavaConfig 当然也是可以混合使用的,至于使用哪种方式还是看个人的编程习惯,没有哪种方式是绝对的好,各有千秋。
  • 看完这两篇关于不同方式Spring的 扩展我们是不是可以自己动手去实现一个了。

以上就是Spring的Xml和JavaConfig 扩展哪个好的详细内容,更多关于Spring的Xml和JavaConfig 扩展的资料请关注脚本之家其它相关文章!

相关文章

  • Java中枚举类的用法示例详解

    Java中枚举类的用法示例详解

    枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中。此外,枚举类型还提供了安全检查功能。本文就来和大家讲讲Java中枚举类的用法,需要的可以参考一下
    2022-07-07
  • Struts2 $,#,%详解及实例代码

    Struts2 $,#,%详解及实例代码

    这篇文章主要介绍了Struts2 $,#,%详解及实例代码的相关资料,需要的朋友可以参考下
    2016-12-12
  • mybatis 查询返回Map<String,Object>类型

    mybatis 查询返回Map<String,Object>类型

    本文主要介绍了mybatis 查询返回Map<String,Object>类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Java 初识CRM之项目思路解析

    Java 初识CRM之项目思路解析

    本篇文章意在帮助大家了解CRM的一些基本概念,介绍相关业务,后文也将会将基于笔者所在公司的业务详细阐述CRM各模块,感兴趣的朋友快来看看吧
    2021-11-11
  • SpringMVC前端和后端数据交互总结

    SpringMVC前端和后端数据交互总结

    本篇文章主要介绍了SpringMVC前端和后端数据交互总结,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • 详解Java递归实现树形结构的两种方式

    详解Java递归实现树形结构的两种方式

    在开发的过程中,很多业务场景需要一个树形结构的结果集进行前端展示,也可以理解为是一个无限父子结构,常见的有报表指标结构、菜单结构等,这篇文章主要介绍了Java递归实现树形结构的两种方式,需要的朋友可以参考下
    2022-10-10
  • 分析讲解Java Random类里的种子问题

    分析讲解Java Random类里的种子问题

    Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字
    2022-05-05
  • SpringBoot集成redis与session实现分布式单点登录

    SpringBoot集成redis与session实现分布式单点登录

    这篇文章主要介绍了SpringBoot集成redis与session实现分布式单点登录,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • springboot 使用mybatis查询的示例代码

    springboot 使用mybatis查询的示例代码

    这篇文章主要介绍了springboot 使用mybatis查询功能,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Java中的CAS和自旋锁详解

    Java中的CAS和自旋锁详解

    这篇文章主要介绍了Java中的CAS和自旋锁详解,CAS算法(Compare And Swap),即比较并替换,是一种实现并发编程时常用到的算法,Java并发包中的很多类都使用了CAS算法,需要的朋友可以参考下
    2023-10-10

最新评论