亚洲一级电影在线观看,九九精品无码专区免费,亚洲AV无码资源在线观看 ,欧美国产高清

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

主站蜘蛛池模板: 国产爆乳无码一区二区麻豆| 定襄县| 亚洲国产成人综合精品2020| 无套中出丰满人妻无码| 高清无码一区| 日本一卡二卡四卡无卡乱码视频免费 | 99ri国产在线| 国产av激情久久无码天堂| 中文区中文字幕免费看| 亚洲中文在线精品国产| 亚洲国产欧美日韩另类| 在线a人片免费观看| 青草午夜精品视频在线观看| 国产成人精彩在线视频50| 亚洲av无码午夜| 婷婷久久久亚洲欧洲日产国码AV| 国产成人亚洲欧美日韩| 毛片视频网址| 亚洲aaa视频| 国产不卡网| 国产麻传媒精品国产av| 免费观看四虎精品国产地址| 久久人人爽人人爽av片| 五月丁香综合激情六月久久| 国产69久久精品成人看| 日日噜噜噜夜夜爽爽狠狠视频| 国产suv精品一区二区33| 亚洲色无码一区二区三区| 丁香五月激情综合国产| 成在人线av无码免费看网站| av区无码字幕中文色| 一本无码久本草在线中文字幕dvd| 宽甸| 沧州市| 欧美日本视频在线观看| 成人精品免费视频| 亚洲欧美成人一区二区在线| 国产在线无码视频一区| 三原县| 亚洲色欲色欲www成人网| 亚洲国产精品久久一线不卡|