溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Spring的Xml和JavaConfig擴(kuò)展哪個(gè)比較好

發(fā)布時(shí)間:2021-05-27 11:26:55 來(lái)源:億速云 閱讀:180 作者:小新 欄目:開(kāi)發(fā)技術(shù)

小編給大家分享一下Spring的Xml和JavaConfig擴(kuò)展哪個(gè)比較好,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

JavaConfig 配置擴(kuò)展

從Spring3.0開(kāi)始Spring提供了JavaConfig的方式可以用來(lái)代替以前XML的這種方式,原來(lái)在XML配置里的都可以通過(guò)注解來(lái)一一替換實(shí)現(xiàn)。主要通過(guò)@Configuration,@Bean, @Import,和@DependsOn這幾個(gè)注解來(lái)搭配實(shí)現(xiàn)的。這種方式也是SpringBoot所使用的。

@Configuration

@Configuration只能標(biāo)記在類(lèi)上,表示該類(lèi)為JavaConfig類(lèi),使其可以被Spring IOC容器掃描識(shí)別并創(chuàng)建Bean加入到容器中。@Configuration類(lèi)就相當(dāng)于以往的一個(gè)xml文件。下面我們看一個(gè)官網(wǎng)提供的例子:

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

這個(gè)定義的JavaConfig就相當(dāng)于原來(lái)如下XML的配置:

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

@Bean

@Bean只能被標(biāo)記在方法上,表示該方法返回一個(gè)Spring Bean,可以被IOC容器托管,相當(dāng)于以前在xml文件中寫(xiě)的元素。

  1. name:指定一個(gè)或者多個(gè)bean的名字,當(dāng)沒(méi)有設(shè)置name時(shí),Spring容器會(huì)默認(rèn)將@Bean方法名作為bean name,當(dāng)設(shè)置了name后,就不會(huì)再使用方法名,同時(shí)設(shè)置多個(gè)name時(shí),除第一個(gè)name外,其他的都會(huì)作為bean的別名。相當(dāng)于xml配置中的name屬性。

  2. initMethod:指定容器在初始化完bean后調(diào)用的方法。相當(dāng)于xml配置中的init-method屬性。

  3. destroyMethod:指定在容器在銷(xiāo)毀bean前調(diào)用的方法。相當(dāng)于xml配置中的 destroy-method。

  4. autowire:指定bean在自動(dòng)裝配時(shí)依賴(lài)注入使用的策略,取值可以參考Enum類(lèi)Autowire 的三個(gè)常量:Autowire.BY_NAME,Autowire.BY_TYPE,Autowire.NO。

@Import

XML配置中的標(biāo)簽,基于JavaConfig提供了@Import來(lái)組合模塊化的配置類(lèi),使用方式如下所示:

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

上面就比較簡(jiǎn)單的介紹了幾種通過(guò)JavaConfig注解來(lái)替換XML形式的注解,使用起來(lái)還是非常簡(jiǎn)單的,如果你有對(duì)以前的XML配置文件都比較了解的話(huà),使用JavaConfig就更加簡(jiǎn)單方便了。

Dubbo的JavaConfig

上篇文章我們介紹了dubbo通過(guò)XML的方式自定義擴(kuò)展,今天我們就接著看看dubbo是如何通過(guò)JavaConfig來(lái)替代XML形式的擴(kuò)展的。
我們看看dubbo的服務(wù)提供者是如何通過(guò)注解來(lái)實(shí)現(xiàn)的

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

@Configuration這個(gè)注解我們上面已經(jīng)介紹過(guò)了,我們重點(diǎn)看下@EnableDubbo這個(gè)注解
@EnableDubbo 其實(shí)又是@EnableDubboConfig @DubboComponentScan是通過(guò)這兩個(gè)組合注解來(lái)實(shí)現(xiàn)的,
@EnableDubboConfig注解實(shí)現(xiàn)如下:

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

這個(gè)注解使用了@Import(DubboConfigConfigurationRegistrar.class) 所以Spring 在處理
@EnableDubboConfig 注解 的時(shí)候就會(huì)去實(shí)例化DubboConfigConfigurationRegistrar
并且調(diào)用它的registerBeanDefinitions方法,這個(gè)方法主要是對(duì)propties文件進(jìn)行解析并根據(jù)不同的配置
項(xiàng)生成對(duì)應(yīng)類(lèi)型的Bean對(duì)象。

總結(jié)

  • 通過(guò)基于XML和基于Java的配置擴(kuò)展,可以使用戶(hù)通過(guò)Spring使用我們研發(fā)的組件,提供很好的易用性。

  • 雖然現(xiàn)在大多數(shù)都是采用JavaConfig這種方式了,但是還是有人會(huì)比較喜歡xml這種方式

  • xml可以讓配置集中化,所有的組件并不是分散的,因此使你對(duì)beans有一個(gè)很好的概覽,比如mybais配置文件、SpingMvc配置文件,都放在一起,如果你需要分割文件,Spring可以幫你實(shí)現(xiàn)。然后(Spring)會(huì)通過(guò)內(nèi)部標(biāo)簽進(jìn)行重新組合或者外部上下文文件進(jìn)行聚合。

  • xml和JavaConfig 當(dāng)然也是可以混合使用的,至于使用哪種方式還是看個(gè)人的編程習(xí)慣,沒(méi)有哪種方式是絕對(duì)的好,各有千秋。

以上是“Spring的Xml和JavaConfig擴(kuò)展哪個(gè)比較好”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI