2016年JAVA认证基础知识:基于反射机制的服务代理调用
在不断注重大学联考能力提高的同时,尤其是JAVA认证备考的后阶段,我们选择的是求准求稳求规范。此复习辅导不等于题海战术,而是要积累实战经验,解决掉一些考场失误等问题。下面一起来看看JAVA认证基础知识——基于反射机制的服务代理调用,相信对大家学习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 = ogger(getClass());
@Resource
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
icationContext = applicationContext;
}
/**
* 通过代理执行业务方法,方法数据
*/
@SuppressWarnings("rawtypes")
@Override
public Object proxy(String beanName, String functionName, String… params) throws ServiceException {
//参数判断
if(pty(beanName)){
throw new Exception("error: beanName is empty.");
}
if(pty(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 || th ==0){
("proxy params is empty.");
}
Method method = null;
//处理无参数调用
if(params == null || th ==0){
try {
//获取服务bean方法
method = lass()。getMethod(functionName);
} catch (SecurityException e) {
r("proxy getMethod SecurityException:"+essage());
tStackTrace();
} catch (Exception e) {
r("proxy invoke IllegalArgumentException:"+essage());
tStackTrace();
throw new Exception("error: get method Exception:"+essage());
}
}else{
//处理有参数调用
//处理调用方法参数
Class[] paraTypes = new Class[th];
for (int i = 0; i < th; i++) {
paraTypes[i] = s;
}
//获取服务bean方法
method = lass()。getMethod(functionName, paraTypes);
}catch (Exception e) {
r("proxy invoke IllegalArgumentException:"+essage());
tStackTrace();
throw new Exception("error: get method Exception:"+essage());
}
}
if(method == null ){
throw new Exception("error: function is not exist.");
}
Object rs = null;
try {
//调用返回数据
rs = ke(bean,params);
} catch (Exception e) {
r("proxy invoke IllegalArgumentException:"+essage());
tStackTrace();
throw new Exception("error: invoke method Exception:"+essage());
}
return rs;
}
/**
* 获取bean对象
* @param beanName
* @return
*/
private Object getBean(String beanName){
Object bean = null;
bean = ean(beanName);
if(bean == null){
try {
Class classe = ame(beanName);
bean = nstance();
} catch (InstantiationException e) {
r("getBean InstantiationException:"+essage());
tStackTrace();
} catch (IllegalAccessException e) {
r("getBean IllegalAccessException:"+essage());
tStackTrace();
}catch ( ClassNotFoundException e) {
r("getBean ClassNotFoundException:"+essage());
tStackTrace();
}
}
g("getBean(),beanName:"+beanName);
return bean;
}
}
调用方式如下:
y("testservice","say","helloword");
testservice 为spring中bean实例
say 为testservice的业务方法
helloword 为参数
以上方式可以使用与远程调用(如webservice等),对外为的代理调用接口。只需实现一个对外接口,调用服务内部多个业务服务。
相關文章
-
JAVA认证基础知识:基于反射机制的服务代理调用
实现原理:通过传递服务bean的名称、执行的方法及参数,通过反射机制进行调用返回。优点:只需对外提供一个接口服务即可,只要容器中操作服务bean,通过接口即可调用,增加服务bean无需增加对外接口。代码如下:接口类public inte -
SUN认证考试知识点:Java反射机制的应用
目标:用一个代理类实现两个相似类的调用1.两个相似类Man类Women类:代理类:package Reflect;import od;public class Person { //代理类private Object target; //目标对象private String methodName; //目标方法private -
JAVA认证基础知识:Java获取当前的系统时间
中国是一个有着五千年历史的文明古国,中华民族素来是一个温文尔雅,落落大方,见义勇为,谦恭礼让的文明礼仪之邦。华夏儿女的举手投足、音容笑貌,无不体现一个人的气质与素养。下面小编跟大家分享一下讲文明的倡议书!【倡议书 -
JAVA认证基础知识:Java文件解压缩示例
Java实现压缩文件的解压缩操作,缺点是压缩文件内不能含有文件名为中文的`的文件,否则会出现如下错误:Exception in thread "main" galArgumentException: MALFORMEDat ring(Unknown Source)at LOC(Unknown Source)at ext -
Java认证基础知识:java字符串转化整型问题
java 字符串转化整型问题public class StringParesInteger {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubtln(_VALUE);tln(_VALUE/10);tln(pareseInt("="));}/** -
JAVA认证基础知识:JSP使用数据库操作
当我们受到启发,对生活有了新的感悟时,不如来好好地做个总结,写一篇心得体会,这样可以帮助我们总结以往思想、工作和学习。那么要如何写呢?下面是小编为大家收集的《水浒传》读书心得,欢迎阅读,希望大家能够喜欢。《水浒传》 -
JAVA认证基础知识:JavaNativeInterface学习小结
心中有不少心得体会时,写一篇心得体会,记录下来,如此就可以提升我们写作能力了。一起来学习心得体会是如何写的吧,以下是小编精心整理的做家务的心得体会(通用23篇),希望能够帮助到大家。做家务的心得体会 篇1今天,家里要进行 -
Java认证考试知识点:JavaSE6的新功能
在学习、工作、生活中出现了失误后,为了避免再犯,就需要写一份自我检讨书好好进行自我反省,请注意写检讨书的心态要端正。想写检讨书却不知道该请教谁?以下是小编为大家收集的学校宿舍卫生检讨书,欢迎大家借鉴与参考,希望对 -
java基础知识:强制类型转换
在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换。那么强制类型转换的知识要点有哪些?快跟yjbys小编一起来看看吧!在Java中由于继承和向上转型,子类可以非 -
Java认证考试知识点:Java时间类的函数
学习是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的`,必须养成平时努力学习的习惯,Java也不例外,下面小编为大家整理了Java里时间类以及函数的相关文章: 1Calendar和Date的转化(1)Calendar转化