日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解使用Spring的BeanPostProcessor優雅的實現工廠模式

瀏覽:39日期:2023-08-28 17:45:22

最近學習Spring的源碼,發現一個利器BeanPostProcessor。這個后置處理器可以在bean初始化前后對bean進行操作。我們可以在初始化的時候對自己想要的bean進行緩存,進而實現自己需要處理的邏輯。

背景

當我們需要根據類型調用接口不同實現的時候,我們可以使用工廠模式實現。下面說下博主遇到過的兩次需要使用工廠的場景。

場景一:當有一個模塊,我們需要根據數據庫的類型實現不同的的sql。我們此時需要定義一個接口然后每一種數據庫實現不同的sql。在調用時根據當前的數據庫類型調用對應的實現類。

場景二:我們業務需要對接不同的傳感器設備,但是總體業務邏輯就是獲取數據,發送心跳。每一種設備的數據協議又不一樣。所以需要使用工廠,根據不同的設備調用對應的實現類。

工廠模式

靜態工廠

/** * @Description * @Author Singh * @Date 2020-07-06 21:54 * @Version **/@Servicepublic class HandlerService1 { public <T> void handle(Constant.HandlerType handlerType, T dataDO) { IHandler handler = null; if(handlerType.getType().intValue() == Constant.HandlerType.HANDLE_TYEP_1.getType()){ handler = new Type1Handler(); }else if(handlerType.getType().intValue() == Constant.HandlerType.HANDLE_TYEP_2.getType()){ handler = new Type2Handler(); }else if(handlerType.getType().intValue() == Constant.HandlerType.HANDLE_TYEP_3.getType()){ handler = new Type3Handler(); }else if(handlerType.getType().intValue() == Constant.HandlerType.HANDLE_TYEP_4.getType()){ handler = new Type4Handler(); }else{ throw new RuntimeException('類型錯誤'); } handler.handle(dataDO); }}

動態工廠,通過class實現

/** * @Description * @Author Singh * @Date 2020-07-06 21:54 * @Version **/@Servicepublic class HandlerService2 { public <T,H extends IHandler> void handle(Class<H> clzz, T dataDO) throws IllegalAccessException, InstantiationException { IHandler handler = clzz.newInstance(); handler.handle(dataDO); }}

進入主題

BeanPostProcessor實現相同接口的不同實現bean的工廠

首先定義一個注解,后續用來標示bean的處理類型

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Handler { @AliasFor(annotation = Component.class) String value() default ''; /** * 業務處理類型 * @return */ Constant.HandlerType handlerType();}

處理類型

/** * @Description * @Author Singh * @Date 2020-07-06 21:25 * @Version **/public class Constant { public enum HandlerType{ HANDLE_TYEP_1(1), HANDLE_TYEP_2(2), HANDLE_TYEP_3(3), HANDLE_TYEP_4(4); private Integer type; HandlerType(Integer type) { this.type = type; } public Integer getType() { return type; } }}

定義接口處理

/** * @Description * @Author Singh * @Date 2020-07-06 21:29 * @Version **/public interface IHandler<T> { void handle(T data);}

BeanPostProcessor實現對bean后置處理。通過注解的類型緩存bean對象。

/** * @Description * @Author Singh * @Date 2020-07-06 21:29 * @Version **/@Servicepublic class HandleService implements BeanPostProcessor { private Map<Integer,IHandler> reportDataHandlerMap = new ConcurrentHashMap<>(); public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if(bean instanceof IHandler){ Handler[] reportHandlers = bean.getClass().getAnnotationsByType(Handler.class); if(reportHandlers == null || reportHandlers.length == 0){return bean; } Handler reportHandler = reportHandlers[0]; reportDataHandlerMap.put(reportHandler.handlerType().getType(), (IHandler) bean); } return bean; } public <T> void handle(Constant.HandlerType handlerType, T dataDO) { IHandler reportDataHandler = reportDataHandlerMap.get(handlerType.getType()); if(reportDataHandler == null){ throw new RuntimeException('類型錯誤'); } reportDataHandler.handle(dataDO); }}

自定義處理器實現,每一種實現一次。

/** * @Description * @Author Singh * @Date 2020-07-06 21:32 * @Version **/@Handler(handlerType = Constant.HandlerType.HANDLE_TYEP_1 )public class Type1Handler implements IHandler<String>{ @Override public void handle(String data) { }}

到此這篇關于詳解使用Spring的BeanPostProcessor優雅的實現工廠模式的文章就介紹到這了,更多相關Spring BeanPostProcessor 工廠模式內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费久久99精品国产自在现线| 日韩美女国产精品| 日本精品国产| 国产精品色婷婷在线观看| 韩日一区二区| 久久只有精品| 久久精品国产99久久| 亚洲综合欧美| 精品在线网站观看| 999久久久精品国产| 亚洲美洲欧洲综合国产一区| 在线观看亚洲精品福利片| 国产日韩免费| 99久久久久国产精品| 国产日韩精品视频一区二区三区| 香蕉精品999视频一区二区| 自由日本语亚洲人高潮| 91精品日本| 婷婷综合在线| 成人国产精品一区二区免费麻豆| 欧美一区二区三区高清视频| 综合欧美精品| 欧美美女一区| 国产成人精品福利| 日韩精品久久久久久久软件91| 国产不卡av一区二区| 日韩有码av| 麻豆亚洲精品| av在线最新| 欧美精品第一区| 亚洲综合日本| 欧美激情日韩| 黑丝美女一区二区| 激情视频网站在线播放色| 国产欧美一区二区三区米奇| 免费日韩av片| 在线亚洲激情| 四虎影视精品| 久久久久91| 日韩一区电影| 韩国一区二区三区视频| 国产精品成人国产| 日本aⅴ亚洲精品中文乱码| 国产99久久久国产精品成人免费| 特黄毛片在线观看| 亚洲无线一线二线三线区别av| 国产福利91精品一区二区| 精品国内亚洲2022精品成人| 国产精品视频一区视频二区| 日本不卡一区二区| 中文字幕av一区二区三区四区| 亚洲毛片在线免费| 久久精品97| 欧洲av不卡| 高清av一区| 涩涩涩久久久成人精品| 日韩精品免费视频一区二区三区 | 国产精品午夜av| 国产日韩欧美在线播放不卡| 日韩一级精品| 91精品电影| 日本成人在线不卡视频| 国产精品2区| 欧美综合另类| 亚洲一区日韩在线| 日本成人在线网站| 久久影视三级福利片| 99精品小视频| 日韩精品中文字幕吗一区二区| 九色精品91| 国产精品中文字幕制服诱惑| 国产日韩中文在线中文字幕| 欧美激情福利| 久久亚洲成人| 91av一区| 色在线视频观看| 亚洲婷婷丁香| 亚洲一级少妇| 国产精品视频一区二区三区四蜜臂| 免费污视频在线一区| 青青国产精品| 久久夜夜操妹子| 国产亚洲精品美女久久| 亚洲二区视频| 少妇精品久久久一区二区| 国产精品成人一区二区不卡| 久久久久网站| 久久精品99国产精品| 99亚洲视频| 亚洲www免费| 欧美一区二区三区免费看| 久久男人av资源站| 日日摸夜夜添夜夜添国产精品| 国产成人调教视频在线观看| 老牛影视一区二区三区| 精品亚洲精品| 男女男精品网站| 日韩欧美一区二区三区免费看| 一本综合精品| 日本久久成人网| 国产精品尤物| 亚洲精品国产偷自在线观看| 国产精品3区| 少妇精品久久久一区二区| 久久中文字幕二区| 久久亚洲道色| 91国内精品| 久久福利精品| 亚洲一级黄色| 国产成人久久精品麻豆二区| 视频一区欧美日韩| 99久精品视频在线观看视频| 久久wwww| 91嫩草精品| 日韩在线播放一区二区| 好看的亚洲午夜视频在线| 美女国产一区二区三区| 久久国际精品| 国产精品综合色区在线观看| 综合一区在线| 综合激情一区| 亚洲精品人人| 亚洲制服一区| 亚洲精品一区二区在线播放∴| 好吊一区二区三区| 夜夜嗨一区二区| 中文一区在线| 亚洲乱码久久| 国产精品视频一区二区三区综合 | 欧美激情三区| 亚洲精品麻豆| 久久亚洲欧美| 日韩高清一区二区| 午夜久久影院| 韩国精品主播一区二区在线观看| 国产精品a级| 国产91欧美| 欧美一区二区三区免费看| 亚洲欧美日韩视频二区| 亚洲黄色影院| 亚洲欧洲日韩精品在线| 日韩精品免费视频一区二区三区 | 国产剧情在线观看一区| 精品美女视频| 99视频精品全部免费在线视频| 日韩午夜精品| 日韩福利视频网| 另类综合日韩欧美亚洲| 色爱av综合网| 亚洲欧美日韩国产综合精品二区| 日韩不卡一区二区三区| 欧美精品不卡| 蜜臀av免费一区二区三区| 亚洲精品国产精品粉嫩| 精品女同一区二区三区在线观看| 欧美日韩一二| 国产精品蜜月aⅴ在线| 成人精品高清在线视频| 久久不射中文字幕| 国产一区二区三区四区五区| 视频一区二区三区中文字幕| 国产成人黄色| 日韩三级精品| 亚洲一本视频| 久久久免费人体| 免费日本视频一区| 久久影院午夜精品| 日本不卡一二三区黄网| 欧美日韩四区| av在线日韩| 久久精品资源| 一二三区精品| 国产精品毛片一区二区在线看| 亚洲韩日在线| 综合色一区二区| 欧美日韩在线二区| 国产传媒在线观看| 欧美极品中文字幕| 亚洲欧洲美洲国产香蕉| 精品中文一区| 久久精品亚洲人成影院| 国产一区2区在线观看| 欧美一区网站| 亚洲精品乱码日韩| 国产亚洲精品v| 在线国产一区| 在线日韩电影| 久久男人av资源站| 精品国产第一福利网站| 精品国产18久久久久久二百| 国产日产精品一区二区三区四区的观看方式| 精品一区在线| 亚洲午夜精品久久久久久app| 91免费精品| 久久精品99久久无色码中文字幕| 国产精品99一区二区三| 日韩国产专区| 久久精品1区| 99亚洲精品| 日韩福利视频网|