欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何把第三方服務(wù)注冊到spring項目容器中

 更新時間:2023年07月23日 09:14:18   作者:Linyb極客之路  
這篇文章主要為大家介紹了如何把第三方服務(wù)注冊到spring項目容器中,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

最近業(yè)務(wù)部門向我們反饋一個問題,我們部門原先提供的組件突然用不了了。后面排查是因為我們提供出去的組件類沒有注入到spring 容器中,之前沒問題是因為業(yè)務(wù)部門的根包名跟我們組件的根包名是一樣,后續(xù)他們根包名換了,導(dǎo)致我們的組件類沒法注入到spring中,當(dāng)時的解決方案是形如下

@SpringBootApplication(scanBasePackages = {"業(yè)務(wù)根包","組件根包"})

就是在業(yè)務(wù)的啟動類上加上掃描組件根包。

雖然這樣的方式可以解決,但是事后復(fù)盤了一下,業(yè)務(wù)方是否需要了解組件根包?是否還有更優(yōu)雅一點的方式?本文就來聊聊如何把第三方服務(wù)注冊到我們項目的spring容器中

注入方式

1、注入的組件個數(shù)比較少

自動裝配機制 + @Bean的形式

示例:

@Configuration
@Slf4j
@EnableConfigurationProperties(XxlJobProperty.class)
public?class?XxlJobAutoConfiguration?{

????@Bean
????@ConditionalOnMissingBean
????public?XxlJobSpringExecutor?xxlJobExecutor(XxlJobProperty property)?{
????????log.info(">>>>>>>>>>> xxl-job config init.");
????????XxlJobSpringExecutor xxlJobSpringExecutor =?new?XxlJobSpringExecutor();
????????xxlJobSpringExecutor.setAdminAddresses(property.getAdminAddresses());
????????xxlJobSpringExecutor.setAppname(property.getExecutorAppname());
????????xxlJobSpringExecutor.setAddress(property.getExecutorAddress());
????????xxlJobSpringExecutor.setIp(property.getExecutorIp());
????????xxlJobSpringExecutor.setPort(property.getExecutorPort());
????????xxlJobSpringExecutor.setAccessToken(property.getAccessToken());
????????xxlJobSpringExecutor.setLogPath(property.getExecutorLogPath());
????????xxlJobSpringExecutor.setLogRetentionDays(property.getExecutorLogRetentionDays());

????????return?xxlJobSpringExecutor;
????}

在META-INF/spring.factories加入

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.github.lybgeek.autoconfiure.XxlJobAutoConfiguration

利用@Eanblexxx + @Import機制

示例:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(HelloSeviceImpl.class)
public?@interface?EnableHelloSvc{
}

在業(yè)務(wù)項目啟動加上@EnableHelloSvc

調(diào)用beanFactory.registerSingleton()

示例:

@Slf4j
public?class?HelloSvcBeanFactoryPostProcessor?implements?BeanFactoryPostProcessor?{

????@Override
????public?void?postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)?throws?BeansException?{
????????String beanName = StringUtils.uncapitalize(HelloService.class.getSimpleName());
????????log.info("register bean : beanName:{}",beanName);

????????beanFactory.registerSingleton(beanName,new?HelloServiceImpl());
????}
}

2、注入的組件個數(shù)比較多

自動裝配機制 + @ComponentScan

示例:

@Configuration
@ComponentScan(basePackages = Constant.SVC_PACAKAEE)
public class ThirdPartySvcAutoConfiguration {
}

在META-INF/spring.factories加入

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.github.lybgeek.autoconfiure.ThirdPartySvcAutoConfiguration

@Eanblexxx + @Import機制+ClassPathScanningCandidateComponentProvider

示例:

public?class?ThirdPartySvcRegister?implements?ImportBeanDefinitionRegistrar?{

????@Override
????public?void?registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry)?{
????????ClassPathBeanDefinitionScanner classPathBeanDefinitionScanner =?new?ClassPathBeanDefinitionScanner(registry);
????????classPathBeanDefinitionScanner.scan(Constant.SVC_PACAKAEE);
????}
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(ThirdPartySvcRegister.class)
public?@interface?EnableThirdPartySvc {
}

在業(yè)務(wù)項目啟動加上@EnableThirdPartySvc

總結(jié)

如果是業(yè)務(wù)開發(fā)人員直接使用

@SpringBootApplication(scanBasePackages = {"業(yè)務(wù)根包","組件根包"})

其實是沒問題的,但是如果作為組件提供給其他業(yè)務(wù)部門使用,能讓業(yè)務(wù)部門無感知,開箱即用會是比較優(yōu)雅的方式

demo鏈接

以上就是如何把第三方服務(wù)注冊到spring項目容器中的詳細內(nèi)容,更多關(guān)于spring注冊第三方服務(wù)注冊的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot整合SQLite的超詳細講解

    SpringBoot整合SQLite的超詳細講解

    sqlite數(shù)據(jù)庫是輕量化,易用的嵌入式數(shù)據(jù)庫,用于設(shè)備端的數(shù)據(jù)管理,可以理解成單點的數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合SQLite的超詳細講解,需要的朋友可以參考下
    2024-03-03
  • 云服務(wù)器環(huán)境搭建及部署(jdk、mysql、redis、nginx環(huán)境搭建)詳細步驟

    云服務(wù)器環(huán)境搭建及部署(jdk、mysql、redis、nginx環(huán)境搭建)詳細步驟

    這篇文章主要給大家介紹了關(guān)于云服務(wù)器環(huán)境搭建及部署(jdk、mysql、redis、nginx環(huán)境搭建)詳細步驟的相關(guān)資料,要在云服務(wù)器上搭建JDK、MySQL、Redis和Nginx的環(huán)境,可以按照以下步驟進行操作,需要的朋友可以參考下
    2024-01-01
  • 用Java實現(xiàn)希爾排序的示例

    用Java實現(xiàn)希爾排序的示例

    問題:現(xiàn)有一段程序S,可以對任意n個數(shù)進行排序。如果現(xiàn)在需要對n^2個數(shù)進行排序,最少需要調(diào)用S多少次?只允許調(diào)用S,不可以做別的操作。我們用希爾排序來做解決這個
    2013-11-11
  • Micronaut框架的簡單使用介紹

    Micronaut框架的簡單使用介紹

    這篇文章主要介紹了Micronaut框架的簡單使用介紹,幫助大家更好的理解和學(xué)習(xí)使用Micronaut,感興趣的朋友可以了解下
    2021-04-04
  • Java使用Alibaba Druid數(shù)據(jù)庫連接池的技術(shù)指南

    Java使用Alibaba Druid數(shù)據(jù)庫連接池的技術(shù)指南

    Druid是阿里巴巴開源平臺上的一個項目,整個項目由數(shù)據(jù)庫連接池、插件框架和SQL解析器組成,它不僅支持高效的連接管理,還集成了 SQL 監(jiān)控、日志輸出和多種擴展功能,本文將從 Druid 的基本概念出發(fā),結(jié)合具體樣例,帶你全面掌握 Druid 的配置與使用,需要的朋友可以參考下
    2025-03-03
  • Java中的字節(jié)流文件讀取教程(一)

    Java中的字節(jié)流文件讀取教程(一)

    這篇文章主要給大家介紹了關(guān)于Java中字節(jié)流文件讀取的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 淺析java中print和println的區(qū)別

    淺析java中print和println的區(qū)別

    以下是對java中print和println的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • 類似微信說話功能的錄音處理代碼分享

    類似微信說話功能的錄音處理代碼分享

    這篇文章主要介紹了類似微信中說話功能的錄音處理代碼,需要大家自己加UI界面,大家參考使用吧
    2014-01-01
  • Java中notify()和notifyAll()的使用區(qū)別

    Java中notify()和notifyAll()的使用區(qū)別

    本文主要介紹了Java中notify()和notifyAll()的使用區(qū)別,文中通過示例代碼介紹的非常詳細,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Java List雙擊事件實現(xiàn)方法

    Java List雙擊事件實現(xiàn)方法

    這篇文章主要介紹了Java List雙擊事件實現(xiàn)方法,需要的朋友可以參考下
    2014-09-09

最新評論