• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. JAVA認證基礎知識:基于反射機制的服務代理調(diào)用

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

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

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

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

          實現(xiàn)原理:通過傳遞服務bean的名稱、執(zhí)行的方法及參數(shù),通過反射機制進行調(diào)用返回。

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

          代碼如下:

          接口類

          public interface ProxyService {

          /**

          * webservice調(diào)用代理

          * @param beanName bean或類名

          * @param functionName 調(diào)用的函數(shù)名

          * @param params 參數(shù)

          * @return

          * @throws Exception

          */

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

          }

          實現(xiàn)類:

          服務基于spring,為了方便獲取服務bean,實現(xiàn)類實現(xiàn)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;

          }

          /**

          * 通過代理執(zhí)行業(yè)務方法,方法數(shù)據(jù)

          */

          @SuppressWarnings("rawtypes")

          @Override

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

          //參數(shù)判斷

          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;

          //處理無參數(shù)調(diào)用

          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{

          //處理有參數(shù)調(diào)用

          //處理調(diào)用方法參數(shù)

          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 {

          //調(diào)用返回數(shù)據(jù)

          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;

          }

          }

          調(diào)用方式如下:

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

          testservice 為spring中bean實例

          say 為testservice的業(yè)務方法

          helloword 為參數(shù)

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

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

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

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

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

        java調(diào)用cmd命令01-29

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

        JAVA認證簡介03-19

        關于Java的內(nèi)省與反射03-17

        JAVA認證基礎知識:JSP使用數(shù)據(jù)庫操作03-18

        SUN JAVA認證介紹12-18

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 日韩一区二区三区中文在线视频 | 亚洲日本一区二区三区在线 | 亚洲欧美卡通在线另类 | 四房婷婷婷婷丁香五月天 | 亚洲精品欧美日韩在线 | 中文字幕久热精品视 |