java切面不需要接口了吗_使用java语言,如何对一个类中的静态方法做切面编程?...
展开全部
package com.classloader.test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class AOPCallStaticMehtod {
private CallBack callBack;
public AOPCallStaticMehtod(CallBack callBack) {
e5a48de588b662616964757a686964616f31333361313965this.callBack = callBack;
}
public static interface CallBack {
void before(Method method);
void after(Method method, Object result);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public Object callMethod(Class clazz, String methodName, Class[] parameterTypes, Object[] parameters) {
Object result = null;
try {
Method method = null;
if (parameterTypes == null || parameterTypes.length == 0) {
method = clazz.getMethod(methodName);
if (Modifier.isStatic(method.getModifiers())) {
callBack.before(method);
result = method.invoke(null);
callBack.after(method, result);
}else{
System.out.println("这不是一个静态方法");
}
} else {
method = clazz.getMethod(methodName, parameterTypes);
if (Modifier.isStatic(method.getModifiers())) {
callBack.before(method);
result = method.invoke(null, parameters);
callBack.after(method, result);
}else{
System.out.println("这不是一个静态方法");
}
}
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
if (e instanceof NoSuchMethodException) {
System.out.println("没有这个方法");
} else {
System.out.println("call is error!");
}
}
return result;
}
public static void main(String[] args) {
CallBack callBack = new CallBack() {
@Override
public void before(Method method) {
if(method.getName().equals("test1") || method.getName().equals("test2")){
System.out.println(method.getName() + "方法在调用之前被拦截,可以在这里切面编程");
}
}
@Override
public void after(Method method, Object result) {
if(method.getName().equals("test1") || method.getName().equals("test2")){
System.out.println(method.getName() + "方法调用以后被拦截,可以在这里切面编程");
System.out.println(method.getName() + "执行结果是:" + result);
System.out.println("-----------------------------------------");
}
}
};
AOPCallStaticMehtod AOPCallStaticMehtod = new AOPCallStaticMehtod(callBack);
AOPCallStaticMehtod.callMethod(Test.class, "test1", new Class[] { String.class }, new Object[] { "ppppppppppp" });
AOPCallStaticMehtod.callMethod(Test.class, "test2", null, null);
}
}
class Test {
public static void test1(String aa) {
System.out.println(aa);
}
public static String test2() {
System.out.println("fffffffffffffffff");
return "test2 result";
}
}
java切面不需要接口了吗_使用java语言,如何对一个类中的静态方法做切面编程?...相关推荐
- java定义一个类显示没有_Java 中的每个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法。_学小易找答案...
[单选题]关于 Java 语言叙述错误的是( ). [判断题]类中 static 修饰的变量或方法,可以使用类名或对象的引用变量访问. [命名题]命名下列化合物, [单选题]急性胰腺炎的主要临床表现是 ...
- java异常类中属于非检测异常的是_下列java语言的常用异常类中,属于检测异常的是()_学小易找答案...
[单选题]在Word 2010的编辑状态,对当前文档中的文字进行"字数统计"操作,应当使用的菜单是( ) [单选题]客运员领带统一,领带夹夹在衬衣的( )钮扣之间. [单选题]文件 ...
- Java反射机制demo(五)—获得并调用一个类中的方法
这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和运行结果.获取所有的方法使用Class类中getMetho ...
- 山科java实验3-2 在安排教师监考时,需要从一组教师中随机选取n个教师参加监考。要求实现一个类RandomTeacher的静态方法public static String[] getRandomT
在安排教师监考时,需要从一组教师中随机选取n个教师参加监考.要求实现一个类RandomTeacher的静态方法public static String[] getRandomTeachers(Stri ...
- java类接口的区别_【Java基础】java接口和类的区别-瑶瑶吖的回答
基本语法区别 Java中接口和抽象类的定义语法分别为interface与abstract关键字. 抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为 ...
- java传统的项目有哪些内容_请问java全套内容都有什么呢?
我整理的Java全套内容学习路线,分为6个阶段(大阶段)第一阶段:java内功心法篇 第二阶段:Java武功秘籍(经典框架) 第三阶段:Java高级功法(主流框架) 第四阶段:Java成神之路 第五阶 ...
- java基础不好框架能学会吗_转行Java能学会吗?零基础学习Java的学习路线
Java的跨平台性.通用性.安全性.高效性决定了这门语言在未来10年都会是最热门的语言之一.Java技术的安全性和平台移植性足够让他应用到不同的领域,它的工作需求足够大,现实一点来说即使Java濒临o ...
- java web 应用技术与案例教程_《Java Web应用开发技术与案例教程》怎么样_目录_pdf在线阅读 - 课课家教育...
出版说明 前言 第1章 java Web应用开发技术概述 1.1 Java Web应用开发技术简介 1.1.1 Java Web应用 1.1.2 Java Web应用开发技术 1.2 Java Web ...
- java技术文章在哪里看呢_谈论Java技术似乎无处不在,但究竟是什么呢?文章末尾有福利...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 谈论Java技术似乎无处不在,但究竟是什么呢? 下面的部分将解释Java技术如何既是一种编程语言,又是一种平台,并概述这种技术可以为您做些什么. Java ...
最新文章
- iOS 11开发教程(二十)iOS11应用视图美化按钮之设置按钮的状态
- 产品经理八大惹怒程序员而被砍杀的行为
- wxWidgets:C++ 异常
- 使用Spring 3 MVC处理表单
- Win10笔记本可以搜索到邻居WiFi却搜不到自家的??
- vue获取上传进度_vue通过input选取apk文件上传,显示进度条
- [整理]让winCE支持中文界面(可切换至英文界面)
- 解决办法:error LNK2005: void * __cdecl operator new(unsigned int) 已经在 LIBCMTD.lib(new.obj) 中定义
- atitit.编程语言会形成进化树--哪些特性会繁荣??通才还是专才的选型 现代编程语言的特性总结
- 【贵州大学计算机考研1】三本学生考研上岸贵州大学软件工程专硕(附带真题与答案)
- Python验证哥德巴赫猜想,并返回数组
- 23位子网掩码是多少_子网掩码23位的是多少
- Win7系统安装详细教程步骤
- Java课程设计学生考勤管理
- 3dmax 建模插件 Rappa Tools 3 笔记
- 【数据科学】斯皮尔曼的等级相关系数(Spearman's coefficient)
- inet_aton函数
- 丘成桐中学科学奖计算机怎样,丘成桐中学科学奖是什么?
- 来自上海的燕谷坊申请纳斯达克IPO上市,募资3000万美元
- DFT分析连续非周期信号注意事项
热门文章
- 启明云端分享|ESP32-C3 IO口控制灯的应用及串口通信示例
- 离线语音AIOT可能成为智能家居应用的新趋势
- php隐含值传递,php – jQuery更新隐藏的输入值,但不传递给POST变量
- 诸神战纪2java_诸神战纪2死神归来
- python3 生成器的send_Python:生成器中send()的行为
- asa防火墙升级固件_奇淫巧技 | 在路由器中添加策略,阻止电视系统升级
- android studio 实用指南,《Android Studio实用指南》4.27 使用演示模式(示例代码)
- 工厂模式的python实现
- 关闭 Adobe Flash 沙箱(保护模式)解决Flash崩溃及卡顿问题
- 动态规划求解序列问题(LIS、JLIS)