展开全部

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语言,如何对一个类中的静态方法做切面编程?...相关推荐

  1. java定义一个类显示没有_Java 中的每个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法。_学小易找答案...

    [单选题]关于 Java 语言叙述错误的是( ). [判断题]类中 static 修饰的变量或方法,可以使用类名或对象的引用变量访问. [命名题]命名下列化合物, [单选题]急性胰腺炎的主要临床表现是 ...

  2. java异常类中属于非检测异常的是_下列java语言的常用异常类中,属于检测异常的是()_学小易找答案...

    [单选题]在Word 2010的编辑状态,对当前文档中的文字进行"字数统计"操作,应当使用的菜单是( ) [单选题]客运员领带统一,领带夹夹在衬衣的( )钮扣之间. [单选题]文件 ...

  3. Java反射机制demo(五)—获得并调用一个类中的方法

    这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和运行结果.获取所有的方法使用Class类中getMetho ...

  4. 山科java实验3-2 在安排教师监考时,需要从一组教师中随机选取n个教师参加监考。要求实现一个类RandomTeacher的静态方法public static String[] getRandomT

    在安排教师监考时,需要从一组教师中随机选取n个教师参加监考.要求实现一个类RandomTeacher的静态方法public static String[] getRandomTeachers(Stri ...

  5. java类接口的区别_【Java基础】java接口和类的区别-瑶瑶吖的回答

    基本语法区别 Java中接口和抽象类的定义语法分别为interface与abstract关键字. 抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为 ...

  6. java传统的项目有哪些内容_请问java全套内容都有什么呢?

    我整理的Java全套内容学习路线,分为6个阶段(大阶段)第一阶段:java内功心法篇 第二阶段:Java武功秘籍(经典框架) 第三阶段:Java高级功法(主流框架) 第四阶段:Java成神之路 第五阶 ...

  7. java基础不好框架能学会吗_转行Java能学会吗?零基础学习Java的学习路线

    Java的跨平台性.通用性.安全性.高效性决定了这门语言在未来10年都会是最热门的语言之一.Java技术的安全性和平台移植性足够让他应用到不同的领域,它的工作需求足够大,现实一点来说即使Java濒临o ...

  8. 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 ...

  9. java技术文章在哪里看呢_谈论Java技术似乎无处不在,但究竟是什么呢?文章末尾有福利...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 谈论Java技术似乎无处不在,但究竟是什么呢? 下面的部分将解释Java技术如何既是一种编程语言,又是一种平台,并概述这种技术可以为您做些什么. Java ...

最新文章

  1. iOS 11开发教程(二十)iOS11应用视图美化按钮之设置按钮的状态
  2. 产品经理八大惹怒程序员而被砍杀的行为
  3. wxWidgets:C++ 异常
  4. 使用Spring 3 MVC处理表单
  5. Win10笔记本可以搜索到邻居WiFi却搜不到自家的??
  6. vue获取上传进度_vue通过input选取apk文件上传,显示进度条
  7. [整理]让winCE支持中文界面(可切换至英文界面)
  8. 解决办法:error LNK2005: void * __cdecl operator new(unsigned int) 已经在 LIBCMTD.lib(new.obj) 中定义
  9. atitit.编程语言会形成进化树--哪些特性会繁荣??通才还是专才的选型 现代编程语言的特性总结
  10. 【贵州大学计算机考研1】三本学生考研上岸贵州大学软件工程专硕(附带真题与答案)
  11. Python验证哥德巴赫猜想,并返回数组
  12. 23位子网掩码是多少_子网掩码23位的是多少
  13. Win7系统安装详细教程步骤
  14. Java课程设计学生考勤管理
  15. 3dmax 建模插件 Rappa Tools 3 笔记
  16. 【数据科学】斯皮尔曼的等级相关系数(Spearman's coefficient)
  17. inet_aton函数
  18. 丘成桐中学科学奖计算机怎样,丘成桐中学科学奖是什么?
  19. 来自上海的燕谷坊申请纳斯达克IPO上市,募资3000万美元
  20. DFT分析连续非周期信号注意事项

热门文章

  1. 启明云端分享|ESP32-C3 IO口控制灯的应用及串口通信示例
  2. 离线语音AIOT可能成为智能家居应用的新趋势
  3. php隐含值传递,php – jQuery更新隐藏的输入值,但不传递给POST变量
  4. 诸神战纪2java_诸神战纪2死神归来
  5. python3 生成器的send_Python:生成器中send()的行为
  6. asa防火墙升级固件_奇淫巧技 | 在路由器中添加策略,阻止电视系统升级
  7. android studio 实用指南,《Android Studio实用指南》4.27 使用演示模式(示例代码)
  8. 工厂模式的python实现
  9. 关闭 Adobe Flash 沙箱(保护模式)解决Flash崩溃及卡顿问题
  10. 动态规划求解序列问题(LIS、JLIS)