Aspectj简单使用(一)
来源:互联网 发布:数据库原理 第5版 pdf 编辑:程序博客网 时间:2024/06/06 01:30
Aspectj切面编程,举个例子,当你要统计多个方法单独的运行时间,你应该会在每个方法中都有一个记录运行前的时间和运行后的时间,当要修改统计时间的方法时,你就要每个方法中去修改,很麻烦,看看用Aspectj怎么做。
MainActivity
public class MainActivity extends AppCompatActivity { static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @BehaviorTrace("摇一摇") public void mShake(View btn){ SystemClock.sleep(new Random().nextInt(500)); Log.d(TAG, "摇一摇功能被使用"); } @BehaviorTrace(value = "发送语音") public void mAudio(View btn){ SystemClock.sleep(new Random().nextInt(500)); Log.d(TAG, "语音消息功能被使用"); } public void mVideo(View btn){ long begin = System.currentTimeMillis(); { SystemClock.sleep(new Random().nextInt(500)); Log.d(TAG, "视频通话功能被使用"); } long duration = System.currentTimeMillis() - begin; Log.d(TAG, "视频通话功能被使用,耗时:" + duration); }}
BehaviorAspect.java
@Aspectpublic class BehaviorAspect { private static final String TAG = "BehaviorAspect"; //切面有哪些方法组成 //只要标注了BehaviorTrace的方法,这个方法就属于这个切面 @Pointcut("execution(@com.jsonaop.annotation.BehaviorTrace * *(..))") public void annoBehavior(){ } //针对切面进行编程 onShake方法会到这个方法中执行 @Around("annoBehavior()") //环绕切点 public Object joinPoint(ProceedingJoinPoint joinPoint) throws Throwable{ Log.d("BehaviorAspect","走我了"); long begin = System.currentTimeMillis(); //方法执行时 Object object=null; try { object=joinPoint.proceed();//执行这句代码,mShake方法会执行 }catch (Exception e) { } long duration = System.currentTimeMillis() - begin; //获取功能名称 MethodSignature singnature = (MethodSignature) joinPoint.getSignature(); Log.d(TAG,singnature.getName()); BehaviorTrace behaviorTrace = singnature.getMethod().getAnnotation(BehaviorTrace.class);// Log.e(TAG,behaviorTrace.toString()); 这里behaviorTrace为空了,目前不知道原因// String funcName = behaviorTrace.value(); //一般可以写入数据库 Log.d("BehaviorAspect", String.format("%s功能被执行, 耗时: %d", "", duration)); return null; }}
@Retention(RetentionPolicy.CLASS)@Target(ElementType.METHOD)public @interface BehaviorTrace { String value();}
感觉一下是不是很巧妙
参考地址:http://blog.csdn.net/hpc19950723/article/details/71250514
代码地址:https://github.com/firsthubgit/AspectjSimpleUse
注意配置gradle
阅读全文
0 0
- Aspectj简单使用(一)
- 在Android Studio 配置AspectJ环境,与简单使用。
- 十三Spring Aop以及AspectJ框架的使用一
- AspectJ(一)简介
- springAOP之aspectJ(一)
- 一、AspectJ概论
- AspectJ使用经验
- AspectJ使用经验
- AspectJ使用经验
- spring AspectJ 基本使用
- 使用@AspectJ注解
- 使用@AspectJ注解
- aspectJ切面使用
- @AspectJ使用示例
- AspectJ原理与使用
- AspectJ 的使用
- Android中使用AspectJ
- AspectJ 使用技巧
- 【如何校验邮件地址的有效性】:目录
- 关于mysql 数据库没有 mysql库 和重启mysql后密码无法登陆 Access denied for user ''@'localhost' to database 'mysql'
- linux之du、df查询磁盘空间
- Oracle学习之存储过程
- 广播---有序广播
- Aspectj简单使用(一)
- 贝叶斯网络总结
- 正则
- 判断数组是否是二叉搜索树的后序遍历序列 JAVA实现
- 有序广播和无序广播
- CSS中position属性absolute与relative 详解
- 配置文件的格式之xml和properties的区分
- usaco3.1 contact
- MFC学习之 将 list 表里的信息写入.txt文本 和 .xls EXCEL 文件中(ODBC)