日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring中最常用的11個擴展點

jf_ro2CN3Fa ? 來源:蘇三說技術(shù) ? 2023-01-11 10:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


之前給大家寫過一篇 Bean 的生命周期,非常受歡迎,里面其實介紹了 Bean 生命周期中所有的擴展點。

今天給大家?guī)淼奈恼?,可以作?Spring 擴展點的補充,一共 11 個,工作中會經(jīng)常用到,如果用得好,很可能會事半功倍哈。

前言

我們一說到spring,可能第一個想到的是 IOC(控制反轉(zhuǎn)) 和 AOP(面向切面編程)。

沒錯,它們是spring的基石,得益于它們的優(yōu)秀設(shè)計,使得spring能夠從眾多優(yōu)秀框架中脫穎而出。

除此之外,我們在使用spring的過程中,有沒有發(fā)現(xiàn)它的擴展能力非常強。由于這個優(yōu)勢的存在,讓spring擁有強大的包容能力,讓很多第三方應(yīng)用能夠輕松投入spring的懷抱。比如:rocketmq、mybatis、redis等。

今天跟大家一起聊聊,在Spring中最常用的11個擴展點。

f83be988-9151-11ed-bfe3-dac502259ad0.png

基于 Spring Boot + MyBatis Plus + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

1.自定義攔截器

spring mvc攔截器根spring攔截器相比,它里面能夠獲取HttpServletRequestHttpServletResponse等web對象實例。

spring mvc攔截器的頂層接口是:HandlerInterceptor,包含三個方法:

  • preHandle 目標方法執(zhí)行前執(zhí)行
  • postHandle 目標方法執(zhí)行后執(zhí)行
  • afterCompletion 請求完成時執(zhí)行

為了方便我們一般情況會用HandlerInterceptor接口的實現(xiàn)類HandlerInterceptorAdapter類。

假如有權(quán)限認證、日志、統(tǒng)計的場景,可以使用該攔截器。

第一步,繼承HandlerInterceptorAdapter類定義攔截器:

publicclassAuthInterceptorextendsHandlerInterceptorAdapter{

@Override
publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)
throwsException{
StringrequestUrl=request.getRequestURI();
if(checkAuth(requestUrl)){
returntrue;
}

returnfalse;
}

privatebooleancheckAuth(StringrequestUrl){
System.out.println("===權(quán)限校驗===");
returntrue;
}
}

第二步,將該攔截器注冊到spring容器:

@Configuration
publicclassWebAuthConfigextendsWebMvcConfigurerAdapter{

@Bean
publicAuthInterceptorgetAuthInterceptor(){
returnnewAuthInterceptor();
}

@Override
publicvoidaddInterceptors(InterceptorRegistryregistry){
registry.addInterceptor(newAuthInterceptor());
}
}

第三步,在請求接口時spring mvc通過該攔截器,能夠自動攔截該接口,并且校驗權(quán)限。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

2.獲取Spring容器對象

在我們?nèi)粘i_發(fā)中,經(jīng)常需要從Spring容器中獲取Bean,但你知道如何獲取Spring容器對象嗎?

2.1 BeanFactoryAware接口

@Service
publicclassPersonServiceimplementsBeanFactoryAware{
privateBeanFactorybeanFactory;

@Override
publicvoidsetBeanFactory(BeanFactorybeanFactory)throwsBeansException{
this.beanFactory=beanFactory;
}

publicvoidadd(){
Personperson=(Person)beanFactory.getBean("person");
}
}

實現(xiàn)BeanFactoryAware接口,然后重寫setBeanFactory方法,就能從該方法中獲取到spring容器對象。

2.2 ApplicationContextAware接口

@Service
publicclassPersonService2implementsApplicationContextAware{
privateApplicationContextapplicationContext;

@Override
publicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{
this.applicationContext=applicationContext;
}

publicvoidadd(){
Personperson=(Person)applicationContext.getBean("person");
}
}

實現(xiàn)ApplicationContextAware接口,然后重寫setApplicationContext方法,也能從該方法中獲取到spring容器對象。

2.3 ApplicationListener接口

@Service
publicclassPersonService3implementsApplicationListener<ContextRefreshedEvent>{
privateApplicationContextapplicationContext;
@Override
publicvoidonApplicationEvent(ContextRefreshedEventevent){
applicationContext=event.getApplicationContext();
}

publicvoidadd(){
Personperson=(Person)applicationContext.getBean("person");
}
}

3.全局異常處理

以前我們在開發(fā)接口時,如果出現(xiàn)異常,為了給用戶一個更友好的提示,例如:

@RequestMapping("/test")
@RestController
publicclassTestController{

@GetMapping("/add")
publicStringadd(){
inta=10/0;
return"成功";
}
}

如果不做任何處理請求add接口結(jié)果直接報錯:

f85bffca-9151-11ed-bfe3-dac502259ad0.png

what?用戶能直接看到錯誤信息?

這種交互方式給用戶的體驗非常差,為了解決這個問題,我們通常會在接口中捕獲異常:

@GetMapping("/add")
publicStringadd(){
Stringresult="成功";
try{
inta=10/0;
}catch(Exceptione){
result="數(shù)據(jù)異常";
}
returnresult;
}

接口改造后,出現(xiàn)異常時會提示:“數(shù)據(jù)異?!?,對用戶來說更友好。

看起來挺不錯的,但是有問題。。。

如果只是一個接口還好,但是如果項目中有成百上千個接口,都要加上異常捕獲代碼嗎?

答案是否定的,這時全局異常處理就派上用場了:RestControllerAdvice。

@RestControllerAdvice
publicclassGlobalExceptionHandler{

@ExceptionHandler(Exception.class)
publicStringhandleException(Exceptione){
if(einstanceofArithmeticException){
return"數(shù)據(jù)異常";
}
if(einstanceofException){
return"服務(wù)器內(nèi)部異常";
}
returnnull;
}
}

只需在handleException方法中處理異常情況,業(yè)務(wù)接口中可以放心使用,不再需要捕獲異常(有人統(tǒng)一處理了)。真是爽歪歪。

4.類型轉(zhuǎn)換器

spring目前支持3中類型轉(zhuǎn)換器:

  • Converter:將 S 類型對象轉(zhuǎn)為 T 類型對象
  • ConverterFactory:將 S 類型對象轉(zhuǎn)為 R 類型及子類對象
  • GenericConverter:它支持多個source和目標類型的轉(zhuǎn)化,同時還提供了source和目標類型的上下文,這個上下文能讓你實現(xiàn)基于屬性上的注解或信息來進行類型轉(zhuǎn)換。

這3種類型轉(zhuǎn)換器使用的場景不一樣,我們以Converter例。假如:接口中接收參數(shù)的實體對象中,有個字段的類型是Date,但是實際傳參的是字符串類型:2021-01-03 1015,要如何處理呢?

第一步,定義一個實體User:

@Data
publicclassUser{

privateLongid;
privateStringname;
privateDateregisterDate;
}

第二步,實現(xiàn)Converter接口:

publicclassDateConverterimplementsConverter<String,Date>{

privateSimpleDateFormatsimpleDateFormat=newSimpleDateFormat("yyyy-MM-ddHHss");

@Override
publicDateconvert(Stringsource){
if(source!=null&&!"".equals(source)){
try{
simpleDateFormat.parse(source);
}catch(ParseExceptione){
e.printStackTrace();
}
}
returnnull;
}
}

第三步,將新定義的類型轉(zhuǎn)換器注入到spring容器中:

@Configuration
publicclassWebConfigextendsWebMvcConfigurerAdapter{

@Override
publicvoidaddFormatters(FormatterRegistryregistry){
registry.addConverter(newDateConverter());
}
}

第四步,調(diào)用接口

@RequestMapping("/user")
@RestController
publicclassUserController{

@RequestMapping("/save")
publicStringsave(@RequestBodyUseruser){
return"success";
}
}

請求接口時User對象中registerDate字段會被自動轉(zhuǎn)換成Date類型。

5.導(dǎo)入配置

有時我們需要在某個配置類中引入另外一些類,被引入的類也加到spring容器中。這時可以使用@Import注解完成這個功能。

如果你看過它的源碼會發(fā)現(xiàn),引入的類支持三種不同類型。

但是我認為最好將普通類和@Configuration注解的配置類分開講解,所以列了四種不同類型:

f871ea2e-9151-11ed-bfe3-dac502259ad0.png

5.1 普通類

這種引入方式是最簡單的,被引入的類會被實例化bean對象。

publicclassA{
}

@Import(A.class)
@Configuration
publicclassTestConfiguration{
}

通過@Import注解引入A類,spring就能自動實例化A對象,然后在需要使用的地方通過@Autowired注解注入即可:

@Autowired
privateAa;

是不是挺讓人意外的?不用加@Bean注解也能實例化bean。

5.2 配置類

這種引入方式是最復(fù)雜的,因為@Configuration注解還支持多種組合注解,比如:

  • @Import
  • @ImportResource
  • @PropertySource等。
publicclassA{
}

publicclassB{
}

@Import(B.class)
@Configuration
publicclassAConfiguration{

@Bean
publicAa(){
returnnewA();
}
}

@Import(AConfiguration.class)
@Configuration
publicclassTestConfiguration{
}

通過@Import注解引入@Configuration注解的配置類,會把該配置類相關(guān)@Import、@ImportResource、@PropertySource等注解引入的類進行遞歸,一次性全部引入。

5.3 ImportSelector

這種引入方式需要實現(xiàn)ImportSelector接口:

publicclassAImportSelectorimplementsImportSelector{

privatestaticfinalStringCLASS_NAME="com.sue.cache.service.test13.A";

publicString[]selectImports(AnnotationMetadataimportingClassMetadata){
returnnewString[]{CLASS_NAME};
}
}

@Import(AImportSelector.class)
@Configuration
publicclassTestConfiguration{
}

這種方式的好處是selectImports方法返回的是數(shù)組,意味著可以同時引入多個類,還是非常方便的。

5.4 ImportBeanDefinitionRegistrar

這種引入方式需要實現(xiàn)ImportBeanDefinitionRegistrar接口:

publicclassAImportBeanDefinitionRegistrarimplementsImportBeanDefinitionRegistrar{
@Override
publicvoidregisterBeanDefinitions(AnnotationMetadataimportingClassMetadata,BeanDefinitionRegistryregistry){
RootBeanDefinitionrootBeanDefinition=newRootBeanDefinition(A.class);
registry.registerBeanDefinition("a",rootBeanDefinition);
}
}

@Import(AImportBeanDefinitionRegistrar.class)
@Configuration
publicclassTestConfiguration{
}

這種方式是最靈活的,能在registerBeanDefinitions方法中獲取到BeanDefinitionRegistry容器注冊對象,可以手動控制BeanDefinition的創(chuàng)建和注冊。

6.項目啟動時

有時候我們需要在項目啟動時定制化一些附加功能,比如:加載一些系統(tǒng)參數(shù)、完成初始化、預(yù)熱本地緩存等,該怎么辦呢?

好消息是springboot提供了:

  • CommandLineRunner
  • ApplicationRunner

這兩個接口幫助我們實現(xiàn)以上需求。

它們的用法還是挺簡單的,以ApplicationRunner接口為例:

@Component
publicclassTestRunnerimplementsApplicationRunner{

@Autowired
privateLoadDataServiceloadDataService;

publicvoidrun(ApplicationArgumentsargs)throwsException{
loadDataService.load();
}
}

實現(xiàn)ApplicationRunner接口,重寫run方法,在該方法中實現(xiàn)自己定制化需求。

如果項目中有多個類實現(xiàn)了ApplicationRunner接口,他們的執(zhí)行順序要怎么指定呢?

答案是使用@Order(n)注解,n的值越小越先執(zhí)行。當然也可以通過@Priority注解指定順序。

7.修改BeanDefinition

Spring IOC在實例化Bean對象之前,需要先讀取Bean的相關(guān)屬性,保存到BeanDefinition對象中,然后通過BeanDefinition對象,實例化Bean對象。

如果想修改BeanDefinition對象中的屬性,該怎么辦呢?

答:我們可以實現(xiàn)BeanFactoryPostProcessor接口。

@Component
publicclassMyBeanFactoryPostProcessorimplementsBeanFactoryPostProcessor{

@Override
publicvoidpostProcessBeanFactory(ConfigurableListableBeanFactoryconfigurableListableBeanFactory)throwsBeansException{
DefaultListableBeanFactorydefaultListableBeanFactory=(DefaultListableBeanFactory)configurableListableBeanFactory;
BeanDefinitionBuilderbeanDefinitionBuilder=BeanDefinitionBuilder.genericBeanDefinition(User.class);
beanDefinitionBuilder.addPropertyValue("id",123);
beanDefinitionBuilder.addPropertyValue("name","蘇三說技術(shù)");
defaultListableBeanFactory.registerBeanDefinition("user",beanDefinitionBuilder.getBeanDefinition());
}
}

在postProcessBeanFactory方法中,可以獲取BeanDefinition的相關(guān)對象,并且修改該對象的屬性。

8.初始化Bean前后

有時,你想在初始化Bean前后,實現(xiàn)一些自己的邏輯。

這時可以實現(xiàn):BeanPostProcessor接口。

該接口目前有兩個方法:

  • postProcessBeforeInitialization 該在初始化方法之前調(diào)用。
  • postProcessAfterInitialization 該方法再初始化方法之后調(diào)用。

例如:

@Component
publicclassMyBeanPostProcessorimplementsBeanPostProcessor{

@Override
publicObjectpostProcessAfterInitialization(Objectbean,StringbeanName)throwsBeansException{
if(beaninstanceofUser){
((User)bean).setUserName("蘇三說技術(shù)");
}
returnbean;
}
}

如果spring中存在User對象,則將它的userName設(shè)置成:蘇三說技術(shù)。

其實,我們經(jīng)常使用的注解,比如:@Autowired、@Value、@Resource、@PostConstruct等,是通過AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor實現(xiàn)的。

9.初始化方法

目前spring中使用比較多的初始化bean的方法有:

  1. 使用@PostConstruct注解
  2. 實現(xiàn)InitializingBean接口

9.1 使用@PostConstruct注解

@Service
publicclassAService{
@PostConstruct
publicvoidinit(){
System.out.println("===初始化===");
}
}

在需要初始化的方法上增加@PostConstruct注解,這樣就有初始化的能力。

9.2 實現(xiàn)InitializingBean接口

@Service
publicclassBServiceimplementsInitializingBean{

@Override
publicvoidafterPropertiesSet()throwsException{
System.out.println("===初始化===");
}
}

實現(xiàn)InitializingBean接口,重寫afterPropertiesSet方法,該方法中可以完成初始化功能。

10.關(guān)閉容器前

有時候,我們需要在關(guān)閉spring容器前,做一些額外的工作,比如:關(guān)閉資源文件等。

這時可以實現(xiàn)DisposableBean接口,并且重寫它的destroy方法:

@Service
publicclassDServiceimplementsInitializingBean,DisposableBean{

@Override
publicvoiddestroy()throwsException{
System.out.println("DisposableBeandestroy");
}

@Override
publicvoidafterPropertiesSet()throwsException{
System.out.println("InitializingBeanafterPropertiesSet");
}
}

這樣spring容器銷毀前,會調(diào)用該destroy方法,做一些額外的工作。

通常情況下,我們會同時實現(xiàn)InitializingBean和DisposableBean接口,重寫初始化方法和銷毀方法。

11.自定義作用域

我們都知道spring默認支持的Scope只有兩種:

  • singleton 單例,每次從spring容器中獲取到的bean都是同一個對象。
  • prototype 多例,每次從spring容器中獲取到的bean都是不同的對象。

spring web又對Scope進行了擴展,增加了:

  • RequestScope 同一次請求從spring容器中獲取到的bean都是同一個對象。
  • SessionScope 同一個會話從spring容器中獲取到的bean都是同一個對象。

即便如此,有些場景還是無法滿足我們的要求。

比如,我們想在同一個線程中從spring容器獲取到的bean都是同一個對象,該怎么辦?

這就需要自定義Scope了。

第一步實現(xiàn)Scope接口:

publicclassThreadLocalScopeimplementsScope{
privatestaticfinalThreadLocalTHREAD_LOCAL_SCOPE=newThreadLocal();

@Override
publicObjectget(Stringname,ObjectFactoryobjectFactory){
Objectvalue=THREAD_LOCAL_SCOPE.get();
if(value!=null){
returnvalue;
}

Objectobject=objectFactory.getObject();
THREAD_LOCAL_SCOPE.set(object);
returnobject;
}

@Override
publicObjectremove(Stringname){
THREAD_LOCAL_SCOPE.remove();
returnnull;
}

@Override
publicvoidregisterDestructionCallback(Stringname,Runnablecallback){
}

@Override
publicObjectresolveContextualObject(Stringkey){
returnnull;
}

@Override
publicStringgetConversationId(){
returnnull;
}
}

第二步將新定義的Scope注入到spring容器中:

@Component
publicclassThreadLocalBeanFactoryPostProcessorimplementsBeanFactoryPostProcessor{
@Override
publicvoidpostProcessBeanFactory(ConfigurableListableBeanFactorybeanFactory)throwsBeansException{
beanFactory.registerScope("threadLocalScope",newThreadLocalScope());
}
}

第三步使用新定義的Scope:

@Scope("threadLocalScope")
@Service
publicclassCService{
publicvoidadd(){
}
}


審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    404

    瀏覽量

    18502
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    536

    瀏覽量

    23033
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    341

    瀏覽量

    16061

原文標題:聊聊 Spring 中最常用的 11 個擴展點

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    【新品】PLC 位不夠用?這款 Profinet 分布式 IO 主機,最多擴展 16 模塊

    PLC位不夠用?遠距離IO布線成本高?模擬量信號干擾大、精度差?M31-U-PN系列Profinet分布式IO主機——億佰特專為西門子PLC打造的靈活I(lǐng)O擴展方案。支持標準Profinet協(xié)議
    的頭像 發(fā)表于 04-16 19:34 ?340次閱讀
    【新品】PLC <b class='flag-5'>點</b>位不夠用?這款 Profinet 分布式 IO 主機,最多<b class='flag-5'>擴展</b> 16 <b class='flag-5'>個</b>模塊

    EtherCAT 主站開發(fā),國內(nèi)工程師最常問的三核心問題

    往往是難點。深耕工業(yè)通訊多年,我們總結(jié)了國內(nèi)工程師在私信和技術(shù)交流中最常問的三核心問題。今天就通過這篇QA,帶大家徹底摸清EtherCAT主站開發(fā)的門道。一、Ethe
    的頭像 發(fā)表于 04-16 13:32 ?1264次閱讀
    EtherCAT 主站開發(fā),國內(nèi)工程師<b class='flag-5'>最常</b>問的三<b class='flag-5'>個</b>核心問題

    Linux新手最常踩的10命令坑介紹

    最新的Linux內(nèi)核特性(kernel 6.x系列)和常見發(fā)行版環(huán)境(Ubuntu 24.04 LTS、RHEL 9.4、CentOS Stream 10),系統(tǒng)梳理新手最常踩的10命令坑,幫助讀者建立正確的操作習(xí)慣和風險意識。
    的頭像 發(fā)表于 04-09 10:11 ?224次閱讀

    Prometheus千節(jié)集群的橫向擴展實踐

    在2026年的運維環(huán)境中,千節(jié)規(guī)模的Kubernetes集群已經(jīng)稀松平常。一典型的中大型互聯(lián)網(wǎng)公司,其Kubernetes集群規(guī)模通常在3000至5000節(jié)點,單個集群中運行的Pod數(shù)量動輒數(shù)萬
    的頭像 發(fā)表于 03-31 14:37 ?230次閱讀

    高頻膠掛絲怎么解決?灌封膠觸變性控制技巧 |鉻銳特實業(yè)

    高頻中最常見的“掛絲”難題如何解決?本文詳解灌封膠觸變性的核心作用,以及通過優(yōu)化觸變恢復(fù)速度、匹配工藝參數(shù),大幅降低掛絲不良率、提升自動化產(chǎn)線良率的實用方法。
    的頭像 發(fā)表于 01-31 01:45 ?749次閱讀
    高頻<b class='flag-5'>點</b>膠掛絲怎么解決?灌封膠觸變性控制技巧 |鉻銳特實業(yè)

    嵌入式程序設(shè)計中4種常用模式

    1. 模板方法模式 模板方法模式是框架中最常用的設(shè)計模式。 其根本的思路是將算法由框架固定,而將算法中具體的操作交給二次開發(fā)者實現(xiàn)。 例如一設(shè)備初始化的邏輯,框架代碼如下: TBool
    發(fā)表于 12-25 07:12

    ?X-NUCLEO-OUT11A1工業(yè)數(shù)字輸出擴展板技術(shù)解析與應(yīng)用指南

    STMicroelectronics X-NUCLEO-OUT11A1擴展板是專為STM32 Nucleo設(shè)計的工業(yè)數(shù)字輸出擴展板。該板為ISO808八通道高側(cè)智能功率固態(tài)繼電器的驅(qū)動和診斷功能提供了強大而靈活的環(huán)境。該繼電器提
    的頭像 發(fā)表于 10-25 10:24 ?1462次閱讀
    ?X-NUCLEO-OUT<b class='flag-5'>11</b>A1工業(yè)數(shù)字輸出<b class='flag-5'>擴展</b>板技術(shù)解析與應(yīng)用指南

    浮點指令擴展中16位指令的處理

    RISC-V支持16位壓縮格式,壓縮格式立即數(shù)位數(shù)更少,能使用的寄存器也比較少,有些指令只能用常用8整數(shù)寄存器(x8-x15)或者(f8-f15)。16 位指令只對匯編器和鏈接器可見,并且是否以短
    發(fā)表于 10-20 11:02

    常用PromQL查詢案例總結(jié)

    在云原生時代,Prometheus已經(jīng)成為監(jiān)控領(lǐng)域的事實標準。作為一名資深運維工程師,我見過太多團隊在PromQL查詢上踩坑,也見過太多因為監(jiān)控不到位導(dǎo)致的生產(chǎn)事故。今天分享10實戰(zhàn)中最常用的PromQL查詢案例,每一都是血
    的頭像 發(fā)表于 09-18 14:54 ?886次閱讀

    工業(yè)物聯(lián)網(wǎng)和自動化領(lǐng)域 Node-RED 最常用的 10 大節(jié)點,你用過幾個?

    本文盤點了工業(yè)物聯(lián)網(wǎng)與自動化領(lǐng)域 Node-RED 最常用的 10 大節(jié)點,包括 inject、debug、MQTT、Modbus、OPC UA 等,并結(jié)合應(yīng)用場景與技巧進行解析。鋇錸技術(shù) ARMxy 系列工業(yè)控制器已預(yù)裝 Node-RED,開機即可實現(xiàn)數(shù)據(jù)采集、協(xié)議轉(zhuǎn)換與云平臺接入。
    的頭像 發(fā)表于 08-13 11:47 ?1791次閱讀
    工業(yè)物聯(lián)網(wǎng)和自動化領(lǐng)域 Node-RED <b class='flag-5'>最常用</b>的 10 大節(jié)點,你用過幾個?

    Spring攔截器:你的請求休想逃過我的五指山!

    Spring框架中,攔截器(Interceptor)是一種強大的機制,它允許開發(fā)者在請求處理的不同階段插入自定義邏輯。WebApplicationContext作為Spring Web應(yīng)用的上下文容器,為攔截器的配置和管理提供了基礎(chǔ)支持。
    的頭像 發(fā)表于 07-26 11:25 ?811次閱讀
    <b class='flag-5'>Spring</b>攔截器:你的請求休想逃過我的五指山!

    已收藏!你需要知道的57常用樹莓派命令!

    ,下面我們將按類別介紹57最常用的命令:目錄文件管理網(wǎng)絡(luò)命令系統(tǒng)更新包管理系統(tǒng)管理樹莓派操作系統(tǒng)命令雜項命令高級命令這份列表是基于我與樹莓派和Linux打交道的一
    的頭像 發(fā)表于 07-23 18:36 ?1316次閱讀
    已收藏!你需要知道的57<b class='flag-5'>個</b><b class='flag-5'>常用</b>樹莓派命令!

    開關(guān)電源維修從入門到精通(完整版)

    詳細地介紹了生活中最常見的4種開關(guān)電源(臺式計算機中的ATX電源、電動車充電器、手機或平板電腦充電器、LCD液晶顯示器中的電源)的原理和維修知識。 獲取完整文檔資料可下載附件哦!!?。∪绻麅?nèi)容有幫助可以關(guān)注、贊、評論支持一下哦~
    發(fā)表于 06-17 16:30

    NS-ZJB型變壓器中性間隙接地保護成套裝置的常用電子元器件及功能解析

    NS-ZJB型變壓器中性間隙接地保護成套裝置的常用電子元器件及功能解析
    的頭像 發(fā)表于 06-16 15:10 ?1593次閱讀

    自動駕駛中常提的“云”是啥?

    [首發(fā)于智駕最前沿微信公眾號]在自動駕駛系統(tǒng)中,云技術(shù)作為三維空間感知的核心手段,為車輛提供了精確的距離和形狀信息,從而實現(xiàn)目標檢測、環(huán)境建模、定位與地圖構(gòu)建等關(guān)鍵功能。那所謂的“云”,到底是
    的頭像 發(fā)表于 05-21 09:04 ?1386次閱讀
    自動駕駛中常提的“<b class='flag-5'>點</b>云”是<b class='flag-5'>個</b>啥?
    镇康县| 搜索| 姜堰市| 韶关市| 建宁县| 唐山市| 茌平县| 十堰市| 德钦县| 西平县| 兖州市| 万全县| 尼玛县| 阿瓦提县| 响水县| 泗洪县| 鄯善县| 鄂州市| 高邑县| 衡东县| 威海市| 岚皋县| 丹巴县| 鸡泽县| 平和县| 棋牌| 攀枝花市| 赤峰市| 渝中区| 临汾市| 马鞍山市| 泾源县| 孟村| 古浪县| 东乡县| 边坝县| 上饶县| 临泽县| 兖州市| 青铜峡市| 安阳县|