<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • JAVA認證基礎知識:基于反射機制的服務代理調用

    時間:2024-08-21 05:07:16 JAVA認證 我要投稿

    2016年JAVA認證基礎知識:基于反射機制的服務代理調用

      在不斷注重高考能力提高的同時,尤其是JAVA認證備考的后階段,我們選擇的是求準求穩求規范。此復習輔導不等于題海戰術,而是要積累實戰經驗,解決掉一些考場失誤等問題。下面一起來看看JAVA認證基礎知識——基于反射機制的服務代理調用,相信對大家學習java有所幫助!

    2016年JAVA認證基礎知識:基于反射機制的服務代理調用

      實現原理:通過傳遞服務bean的名稱、執行的方法及參數,通過反射機制進行調用返回。

      優點:只需對外提供一個接口服務即可,只要容器中操作服務bean,通過接口即可調用,增加服務bean無需增加對外接口。

      代碼如下:

      接口類

      public interface ProxyService {

      /**

      * webservice調用代理

      * @param beanName bean或類名

      * @param functionName 調用的函數名

      * @param params 參數

      * @return

      * @throws Exception

      */

      Object proxy(String beanName, String functionName,String… params) throws Exception;

      }

      實現類:

      服務基于spring,為了方便獲取服務bean,實現類實現spring的ApplicationContextAware接口

      @Service

      public class ProxyServiceImpl implements ProxyService ,ApplicationContextAware{

      protected final Logger logger = LoggerFactory.getLogger(getClass());

      @Resource

      private ApplicationContext applicationContext;

      @Override

      public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

      this.applicationContext = applicationContext;

      }

      /**

      * 通過代理執行業務方法,方法數據

      */

      @SuppressWarnings("rawtypes")

      @Override

      public Object proxy(String beanName, String functionName, String… params) throws ServiceException {

      //參數判斷

      if(StringUtils.isEmpty(beanName)){

      throw new Exception("error: beanName is empty.");

      }

      if(StringUtils.isEmpty(functionName)){

      throw new Exception("error: functionName is empty.");

      }

      //獲取服務bean

      Object bean = getBean(beanName);

      if(bean == null){

      throw new Exception("error: bean is not exist.");

      }

      if(params == null || params.length ==0){

      logger.warn("proxy params is empty.");

      }

      Method method = null;

      //處理無參數調用

      if(params == null || params.length ==0){

      try {

      //獲取服務bean方法

      method = bean.getClass()。getMethod(functionName);

      } catch (SecurityException e) {

      logger.error("proxy getMethod SecurityException:"+e.getMessage());

      e.printStackTrace();

      } catch (Exception e) {

      logger.error("proxy invoke IllegalArgumentException:"+e.getMessage());

      e.printStackTrace();

      throw new Exception("error: get method Exception:"+e.getMessage());

      }

      }else{

      //處理有參數調用

      //處理調用方法參數

      Class[] paraTypes = new Class[params.length];

      for (int i = 0; i < paraTypes.length; i++) {

      paraTypes[i] = String.class;

      }

      //獲取服務bean方法

      method = bean.getClass()。getMethod(functionName, paraTypes);

      }catch (Exception e) {

      logger.error("proxy invoke IllegalArgumentException:"+e.getMessage());

      e.printStackTrace();

      throw new Exception("error: get method Exception:"+e.getMessage());

      }

      }

      if(method == null ){

      throw new Exception("error: function is not exist.");

      }

      Object rs = null;

      try {

      //調用返回數據

      rs = method.invoke(bean,params);

      } catch (Exception e) {

      logger.error("proxy invoke IllegalArgumentException:"+e.getMessage());

      e.printStackTrace();

      throw new Exception("error: invoke method Exception:"+e.getMessage());

      }

      return rs;

      }

      /**

      * 獲取bean對象

      * @param beanName

      * @return

      */

      private Object getBean(String beanName){

      Object bean = null;

      bean = applicationContext.getBean(beanName);

      if(bean == null){

      try {

      Class classe = Class.forName(beanName);

      bean = classe.newInstance();

      } catch (InstantiationException e) {

      logger.error("getBean InstantiationException:"+e.getMessage());

      e.printStackTrace();

      } catch (IllegalAccessException e) {

      logger.error("getBean IllegalAccessException:"+e.getMessage());

      e.printStackTrace();

      }catch ( ClassNotFoundException e) {

      logger.error("getBean ClassNotFoundException:"+e.getMessage());

      e.printStackTrace();

      }

      }

      logger.debug("getBean(),beanName:"+beanName);

      return bean;

      }

      }

      調用方式如下:

      proxyService.proxy("testservice","say","helloword");

      testservice 為spring中bean實例

      say 為testservice的業務方法

      helloword 為參數

      以上方式可以使用與遠程調用(如webservice等),對外為的代理調用接口。只需實現一個對外接口,調用服務內部多個業務服務。

    【JAVA認證基礎知識:基于反射機制的服務代理調用】相關文章:

    JAVA認證基礎知識:基于反射機制的服務代理調用03-08

    JAVA認證基礎知識:Java獲取當前的系統時間03-18

    JAVA認證基礎知識:JavaNativeInterface學習小結01-11

    java調用cmd命令01-29

    Java認證基礎知識:java字符串轉化整型問題03-18

    JAVA認證簡介03-19

    關于Java的內省與反射03-17

    JAVA認證基礎知識:JSP使用數據庫操作03-18

    SUN JAVA認證介紹12-18

    主站蜘蛛池模板: 国产免费久久精品99久久| 精品一区二区三区高清免费观看 | 青草国产精品视频。| 国产午夜福利精品一区二区三区| 隔壁老王国产在线精品| 国产麻豆一精品一AV一免费| 久久九九久精品国产| 欧美日韩在线亚洲国产精品| 无码精品国产VA在线观看DVD| 国产乱码伦精品一区二区三区麻豆| freesexvideos精品老师毛多| 日韩精品一二三区| 国产成人精品大尺度在线观看| 国产精品后入内射日本在线观看| 欧美精品亚洲精品日韩专区 | 99re6在线视频精品免费| 日韩精品一区二区午夜成人版 | 国产精品 视频一区 二区三区| 久久亚洲精品成人av无码网站| 国内精品久久久久久久久电影网| 欧美精品亚洲精品日韩1818| 久久发布国产伦子伦精品| 伊人久久精品无码av一区| 久久国产精品波多野结衣AV| 亚洲国语精品自产拍在线观看| 国产精品揄拍100视频| 自拍偷在线精品自拍偷无码专区| 惠民福利中文字幕人妻无码乱精品 | 囯产精品一区二区三区线| 国产精品99久久精品| 久久久久无码精品国产不卡| 亚洲综合欧美精品一区二区| 午夜精品久久久久成人| 国产一区精品| 精品无码久久久久久国产 | 精品无码AV一区二区三区不卡 | 另类国产精品一区二区| 黑巨人与欧美精品一区 | 国产亚洲综合成人91精品| 国产综合色在线精品| 日本一卡精品视频免费|