中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      JAVA認(rèn)證基礎(chǔ)知識(shí):基于反射機(jī)制的服務(wù)代理調(diào)用

      時(shí)間:2024-08-21 05:07:16 JAVA認(rèn)證 我要投稿

      2016年JAVA認(rèn)證基礎(chǔ)知識(shí):基于反射機(jī)制的服務(wù)代理調(diào)用

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

      2016年JAVA認(rèn)證基礎(chǔ)知識(shí):基于反射機(jī)制的服務(wù)代理調(diào)用

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

        優(yōu)點(diǎn):只需對(duì)外提供一個(gè)接口服務(wù)即可,只要容器中操作服務(wù)bean,通過(guò)接口即可調(diào)用,增加服務(wù)bean無(wú)需增加對(duì)外接口。

        代碼如下:

        接口類

        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;

        }

        實(shí)現(xiàn)類:

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

        }

        /**

        * 通過(guò)代理執(zhí)行業(yè)務(wù)方法,方法數(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.");

        }

        //獲取服務(wù)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;

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

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

        try {

        //獲取服務(wù)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;

        }

        //獲取服務(wù)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)用返回?cái)?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對(duì)象

        * @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實(shí)例

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

        helloword 為參數(shù)

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

      【JAVA認(rèn)證基礎(chǔ)知識(shí):基于反射機(jī)制的服務(wù)代理調(diào)用】相關(guān)文章:

      JAVA認(rèn)證基礎(chǔ)知識(shí):基于反射機(jī)制的服務(wù)代理調(diào)用03-08

      JAVA認(rèn)證基礎(chǔ)知識(shí):Java獲取當(dāng)前的系統(tǒng)時(shí)間03-18

      JAVA認(rèn)證基礎(chǔ)知識(shí):JavaNativeInterface學(xué)習(xí)小結(jié)01-11

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

      Java認(rèn)證基礎(chǔ)知識(shí):java字符串轉(zhuǎn)化整型問(wèn)題03-18

      JAVA認(rèn)證簡(jiǎn)介03-19

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

      JAVA認(rèn)證基礎(chǔ)知識(shí):JSP使用數(shù)據(jù)庫(kù)操作03-18

      SUN JAVA認(rèn)證介紹12-18

      主站蜘蛛池模板: 成人性色生活片免费毛片| 人妻少妇综合一区二区| 吉首市| 中文字幕午夜AV福利片| 亚洲一区二区三区最新| 日日噜噜噜夜夜爽爽狠狠视频| 国产亚洲AV片a区二区| 制服丝袜人妻中出第一页| 久久中文字幕av第二页| 嗯啊 不要 啊啊在线日韩a | 蜜桃一区二区三区在线看| 辽宁省| 临泉县| 沅陵县| 万山特区| 富源县| 乡城县| 绵阳市| 文成县| 乌兰浩特市| 原平市| 国产欧美日本亚洲精品一5区| 丹寨县| 漯河市| 广灵县| 亚洲无码性爱视频在线观看| 竹溪县| 江阴市| 精品国产亚洲av成人一区| 中文字幕日本人妻一区| 国产小视频一区二区三区| 大白屁股流白浆一区二区三区| 亚洲女同视频在线观看| 国产精品专区一区二区av免费看| 国产精品综合色区av| 狠狠一本天堂亚洲综合十八禁| 论坛| 日韩不卡无码三区| 国产一区二区三区成视频| 扒开非洲女人大荫蒂视频| 亚洲老女人区一区二视频 |