亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java使用@EnableEurekaServer實現(xiàn)自動裝配詳解

 更新時間:2022年10月26日 08:51:29   作者:hongmin.shm  
這篇文章主要介紹了Java使用@EnableEurekaServer實現(xiàn)自動裝配過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧

實踐

仿照@EnableEurekaServer實現(xiàn)自動裝配

如果你使用過Eureka作為微服務的注冊中心,那么對@EnableWebConfigure一定很了解,該注解用來開啟Eureka服務端作為微服務的注冊中心,其背后是springboot自動裝配原理。

本次,將仿照此設(shè)計思路,完成Web應用統(tǒng)一異常處理、TraceId鏈路日志追蹤、Json序列化消息處理器等通用能力的自動裝配。

@EnableEurekaServer

通過源碼我們得知,此注解的源碼如下

/**
 * Annotation to activate Eureka Server related configuration.
 * {@link EurekaServerAutoConfiguration}
 *
 * @author Dave Syer
 * @author Biju Kunjummen
 *
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(EurekaServerMarkerConfiguration.class)
public @interface EnableEurekaServer {
}

那么,如何通過在啟動類標識此注解即可實現(xiàn)EurekaServer的自動裝配呢?

答案其實在這一句

@Import(EurekaServerMarkerConfiguration.class)

該注解使用了@Import注解導入了一個配置類 EurekaServerMarkerConfiguration.java,該配置類源碼如下

@Configuration(proxyBeanMethods = false)
public class EurekaServerMarkerConfiguration {
	@Bean
	public Marker eurekaServerMarkerBean() {
		return new Marker();
	}
	class Marker {
	}
}

我們看到,該配置類聲明了一個Bean 內(nèi)部類Marker

那么,為什么聲明這個類?這個類看起來沒有任何屬性和方法

我們在導入的EurekaServer包中繼續(xù)尋找答案

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

通過Command + 單擊 Marker類,我們看到了如下引用

@ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class)

可以發(fā)現(xiàn),一個條件裝配使用了這個類,該注解的含義是當上下文中有Marker實例時,進行注解所在配置類的裝配,也就是 EurekaServerAutoConfiguration

通過查看其源碼,可以看到大量的EurekaServer相關(guān)Bean聲明,也就是說,實現(xiàn)了EurekaServerAutoConfiguration的裝配,也就實現(xiàn)類EurekaServer的裝配

好的,思路清晰了 通過@EnableEurekaServer來導入EurekaServerMarkerConfiguration,進而將內(nèi)部類Marker實例化到spring上下文中,通過條件裝配,再來裝配EurekaServerAutoConfiguration配置文件

也就是說 內(nèi)部類Marker 起到了一個開關(guān)的作用

接下來只剩最后一個問題,我們只寫了一行代碼,也就是 @EnableEurekaServer 加到了springboot啟動類上,那么 EurekaServerAutoConfiguration 是怎樣被識別并導入到我們自己的項目中呢?

涉及到另一個知識點 spring.factories 它可以實現(xiàn),將我們編寫的jar包中的配置類,能夠被依賴方識別到。

關(guān)于這點請自行百度查閱前置知識,只要理解它的作用,代碼其實很簡單。關(guān)于這點多說一下,許久之前我曾經(jīng)有過疑惑,就是我編寫的Common包其中包含了使用spring注解@Component、@Service、@Controller等修飾的Bean,那么引入這個jar包的spring工程,如何能夠?qū)?/p>

這個Bean注入到spring上下文中呢,使用@ComponentScan掃描,顯然勉強能夠?qū)崿F(xiàn),但是如果所有引入的工程都去改寫@ComponentScan 顯然不現(xiàn)實,spring.factories就可以靈活的實現(xiàn)該需求,自動的將配置進行導入

@EnableWebConfigure

@EnableWebConfigure 是我自定義的注解,期望用它來自動開啟Web相關(guān)的公共能力,實現(xiàn)如下:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(WebMarkerConfiguration.class)
public @interface EnableWebConfigure {
}

注解標識在啟動類上即可,它并沒有屬性和方法,僅導入了另一個配置類 WebMarkerConfiguration.class

@Configuration
public class WebMarkerConfiguration {
    @Bean
    public Marked createMarkedInstance(){
        return new Marked();
    }
    class Marked{
    }
}

可以看到,我很懶,連名字都跟EurekaServer中的實現(xiàn)一樣…

而引用此Marked標識的是配置類 InternalCommonBeanConfiguration

@Configuration
@Import({WebConfig.class, WebMvcConfig.class})
@ConditionalOnBean(WebMarkerConfiguration.Marked.class)
public class InternalCommonBeanConfiguration {
    @Bean
    public GlobalExceptionInterceptor createGlobalExceptionInterceptor(){
        // 全局異常處理
        return new GlobalExceptionInterceptor();
    }
    @Bean
    public TransIdFilter createTransIdFilter(){
        // TraceId 過濾器
        return new TransIdFilter();
    }
}

類中除了聲明GlobalExceptionInterceptor以及TransIdFilter,還導入了@Import({WebConfig.class, WebMvcConfig.class}) 這兩個類用來配合@ResponseBody或者@RestController實現(xiàn)JSON序列化

最后,通過在internal-common工程resource文件下,新建 META-INF/spring.factories 文件,來暴露InternalCommonBeanConfiguration,以方便其他項目能夠在依賴時,自動導入。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  org.sun.online.internalcommon.configure.InternalCommonBeanConfiguration

具體工程中的應用請見 org.sun.online.serviceverificationcode.ServiceVerificationCodeApplication

設(shè)計價值

依賴方:后續(xù)的Web服務工程中,只需要@EnableWebConfigure 即可獲得相應的通用能力

被依賴方:通過拓展 InternalCommonBeanConfiguration 即可令所有依賴方無需代碼改動直接獲得支持,方便升級維護

到此這篇關(guān)于Java使用@EnableEurekaServer實現(xiàn)自動裝配詳解的文章就介紹到這了,更多相關(guān)Java @EnableEurekaServer內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring security在分布式項目下的配置方法(案例詳解)

    spring security在分布式項目下的配置方法(案例詳解)

    這篇文章主要介紹了spring security在分布式項目下的配置方法,本文通過一個項目案例給大家詳細介紹,通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Java Collection集合的三種遍歷方式詳解

    Java Collection集合的三種遍歷方式詳解

    Collection集合遍歷的方式有三種,迭代器foreach/增強for循環(huán)lambda表達式,這篇文章主要介紹了Java Collection集合的三種遍歷方式,需要的朋友可以參考下
    2022-11-11
  • Spring Boot日志的打印與持久化詳細解析

    Spring Boot日志的打印與持久化詳細解析

    Spring Boot默認使用SLF4J+Logback 記錄日志,并提供了默認配置,即使我們不進行任何額外配,也可以使用SLF4J+Logback進行日志輸出
    2022-07-07
  • Spring案例打印機的實現(xiàn)過程詳解

    Spring案例打印機的實現(xiàn)過程詳解

    這篇文章主要介紹了Spring案例打印機的實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • springboot+WebMagic+MyBatis爬蟲框架的使用

    springboot+WebMagic+MyBatis爬蟲框架的使用

    本文是對spring boot+WebMagic+MyBatis做了整合,使用WebMagic爬取數(shù)據(jù),然后通過MyBatis持久化爬取的數(shù)據(jù)到mysql數(shù)據(jù)庫。具有一定的參考價值,感興趣的可以了解一下
    2021-08-08
  • Java的springcloud Sentinel是什么你知道嗎

    Java的springcloud Sentinel是什么你知道嗎

    這篇文章主要介紹了Java之springcloud Sentinel案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot實現(xiàn)簡易支付寶網(wǎng)頁支付功能

    SpringBoot實現(xiàn)簡易支付寶網(wǎng)頁支付功能

    小編最近實現(xiàn)一個功能基于springboot程序的支付寶支付demo,非常不錯適合初學者入門學習使用,今天把SpringBoot實現(xiàn)簡易支付寶網(wǎng)頁支付功能的示例代碼分享給大家,感興趣的朋友參考下吧
    2021-10-10
  • 介紹java中Pair(配對)

    介紹java中Pair(配對)

    這篇文章主要介紹了介紹java中Pair(配對),示例描述使用Pair類實現(xiàn)簡單Integer到String的映射,示例中g(shù)etKey方法返回key對象,getValue方法返回對應值對象,需要的朋友可以參考下
    2023-03-03
  • 詳解idea中web.xml默認版本問題解決

    詳解idea中web.xml默認版本問題解決

    這篇文章主要介紹了詳解idea中web.xml默認版本問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • SpringBoot登錄、退出、獲取用戶信息的session處理方案

    SpringBoot登錄、退出、獲取用戶信息的session處理方案

    這篇文章主要介紹了SpringBoot登錄、退出、獲取用戶信息的session處理,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08

最新評論