java基础(1)-几种获取类的扩展方式
生活随笔
收集整理的這篇文章主要介紹了
java基础(1)-几种获取类的扩展方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
摘要
在日常開發過程中經常需要獲取類的擴展集。即獲取類的子類集(抽象類),或者接口實現類。比如說狀態模式中,狀態構建類,策略模式中的,策略構造方式。本文介紹幾種獲取方式。
實現
以策略模式為例
定義了2種策略
interface Handle,實現類ApproveHandle、RefuseHandle
方式1 Spring大法好
Spring為java web開發提供了很多便捷,這么剛需的需求,Spring當然可以搞定
ListableBeanFactory 擴展了FactoryBean,自然能夠獲取bean的定義,所以可以從ApplicationContext獲取類的擴展類
方式2 還是Spring
Spring提供了很多的擴展,允許我們在初始化bean之前,之后做一些自定義邏輯。當然也可以在Spring裝配整個過程完成后做一些注入的邏輯
@Service public class InstanceBySpring implements InstanceFactory, InitializingBean {private static Map<StateEnum, AbstractState> map = new HashMap<>();private static Map<StrategyEnum, Handle> mapStrategy = new HashMap<>();@Autowiredprivate List<AbstractState> states;@Autowiredprivate List<Handle> handles;// 加載完了處理自己的邏輯@Overridepublic void afterPropertiesSet() throws Exception {if (!CollectionUtils.isEmpty(states)) {map = states.stream().collect(Collectors.toMap(v -> v.getCode(), Function.identity()));}if (!CollectionUtils.isEmpty(handles)) {mapStrategy = handles.stream().collect(Collectors.toMap(v -> v.getStrateType(), Function.identity()));}}@Overridepublic AbstractState getStateInstance(final StateEnum stateEnum) {return map.get(stateEnum);}@Overridepublic Handle getStrategyInstance(final StrategyEnum strategyEnum) {return mapStrategy.get(strategyEnum);} }方式3 能不能不用Spring
離了Spring還能不能活,當然可以了。jdk本身提供了擴展支持ServiceLoader類。
總結
這邊是以接口類來介紹的,對于接口也同樣適用。完整代碼見github
關注公眾號【方丈的寺院】,第一時間收到文章的更新,與方丈一起開始技術修行之路
轉載于:https://www.cnblogs.com/stoneFang/p/11099576.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java基础(1)-几种获取类的扩展方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: How to: Build a Clie
- 下一篇: git 代理设置