最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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

雖然這樣的方式可以解決,但是事后復盤了一下,業(yè)務方是否需要了解組件根包?是否還有更優(yōu)雅一點的方式?本文就來聊聊如何把第三方服務注冊到我們項目的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è)務項目啟動加上@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è)務項目啟動加上@EnableThirdPartySvc

總結(jié)

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

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

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

demo鏈接

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

相關文章

最新評論

延寿县| 莲花县| 丘北县| 四川省| 昌乐县| 谷城县| 乌兰浩特市| 神木县| 华宁县| 双鸭山市| 广东省| 耿马| 海南省| 和林格尔县| 贵阳市| 隆化县| 图木舒克市| 南漳县| 建湖县| 永丰县| 原阳县| 临武县| 贞丰县| 会同县| 建始县| 贵港市| 岑巩县| 星子县| 繁峙县| 泽州县| 吉木萨尔县| 万宁市| 大宁县| 濮阳县| 平罗县| 榕江县| 阿城市| 吕梁市| 桓台县| 宁都县| 满洲里市|