DevNotes-Spring的Xml和JavaConfig扩展-《Java笔记》

admin 2025-10-19 04:30:08 编程 来源:ZONE.CI 全球网 0 阅读模式

Java Spring

JavaConfig 配置扩展

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

@Configuration

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

  1. @Configuration
  2. public class AppConfig {
  3. @Bean
  4. public MyService myService() {
  5. return new MyServiceImpl();
  6. }
  7. }

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

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

@Bean

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

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

    @Import

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

    1. @Configuration()
    2. @Import({ApplicationContextConfig.class})
    3. public class ApplicationContextConfig {

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

    Dubbo的JavaConfig

    Dubbo是如何通过JavaConfig来替代XML形式的扩展的。看看dubbo的服务提供者是如何通过注解来实现的

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

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

    1. @Target({ElementType.TYPE})
    2. @Retention(RetentionPolicy.RUNTIME)
    3. @Inherited
    4. @Documented
    5. @Import(DubboConfigConfigurationRegistrar.class)
    6. 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 当然也是可以混合使用的,至于使用哪种方式还是看个人的编程习惯,没有哪种方式是绝对的好,各有千秋。
以太坊cppgolang区别 编程

以太坊cppgolang区别

以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
progolang 编程

progolang

Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
golangn个发送者 编程

golangn个发送者

Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
golang技能图谱 编程

golang技能图谱

从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
评论:0   参与:  7