package com.hnii.action;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import com.hnii.service.comment;
import com.hnii.service.parameter;
// @Aspect : 标记为切面类
// @Pointcut : 指定匹配切点集合
// @Before : 指定前置通知,value中指定切入点匹配
// @AfterReturning :后置通知,具有可以指定返回值
// @AfterThrowing :异常通知
//注意:前置/后置/异常通知的函数都没有返回值,只有环绕通知有返回值
@Component
//首先初始化切面类
@Aspect
//声明为切面类,底层使用动态代理实现AOP
public class AspectAdvice {
// 指定切入点匹配表达式,注意它是以方法的形式进行声明的。
// 即切点集合是:aop.annotation包下所有类所有方法
// 第一个* 代表返回值类型
// 如果要设置多个切点可以使用 || 拼接
@Pointcut("execution(* com.hnii.service.*.*(..))|| execution(* com.action.admin.*.*update*(..))")
public void anyMethod() {
}
// 前置通知
// 在切点方法集合执行前,执行前置通知
@Before("execution(* com.hnii.service.*.*(..))")
public void doBefore(JoinPoint jp) {
System.out.println("要进入切入点方法了.......\n");
}
// 后置通知
@AfterReturning(value = "anyMethod()", returning = "result")
public void doAfter(JoinPoint jp, String result)
throws IllegalArgumentException, IllegalAccessException,
ClassNotFoundException {
System.out.println("切入点方法执行完了....... \n");
Object obj[] = jp.getArgs();
Annotation[] ans = jp.getTarget().getClass().getAnnotations();
for (Annotation a : ans) {
if (a instanceof comment) {
comment c = (comment) a;
System.out.print("生成日志信息---->调用了" + c.value() + "的");
}
}
try {
Class<?> args1[] = new Class[obj.length];
for (int i = 0; i < obj.length; i++) {
args1[i] = obj[i].getClass();
}
Method m = jp.getTarget().getClass().getDeclaredMethod(jp.getSignature().getName().substring(jp.getSignature().getName().lastIndexOf(".")+1),
args1);
Annotation[] aaa = m.getAnnotations();
for (Annotation a : aaa) {
if (a instanceof comment) {
comment c = (comment) a;
String functionname = c.value();
String p = "";
Annotation[][] aps = m.getParameterAnnotations();
for (Annotation[] ap1 : aps) {
for (Annotation ap11 : ap1) {
if (ap11 instanceof parameter) {
parameter k = (parameter) ap11;
p = k.value() + ":" + obj[0];
}
}
}
System.out.println(functionname + ",参数为---》" + p);
}
}
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 异常通知
@AfterThrowing(value = "execution(* com.java1234.service.*.*(..))", throwing = "e")
public void doThrow(JoinPoint jp, Throwable e) {
System.out.println("删除出错啦");
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
spring aop生成日志文件

共81个文件
jar:59个
class:6个
java:6个


温馨提示
利用自定义注解和spring aop和java反射机制生成用户能够读懂的日志记录。如:用户张三在2013年9月27日17:00执行了用户管理模块的用户删除功能参数为(编号:123456)各位可根据需要写入数据库或者保存到文件。
资源推荐
资源详情
资源评论


















收起资源包目录





































































































共 81 条
- 1
资源评论

- hanbingzhouxu2017-06-28反射机制一直没用好,这个拿来参考一下。
- youmo20082014-03-19简单实用 适合初学者
- 江湖再见9942013-12-05该文档还比较好吧 适合初学者使用
- otheforever2013-11-30很好的例子 正好用得上

z383465160
- 粉丝: 1
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 5种ceemdan组合时间序列预测模型Python代码(包括ceemdan-lstm、ceemdan-cnn-lstm等)
- 江苏移动通信有限责任公司员工绩效考核实施细则精.doc
- 最新国家开放大学电大《优秀广告作品评析答案》网络核心课形考网考作业.docx
- 工程项目管理计划书.doc
- 基于PLC双轴位置控制.docx
- 基于复矢量PI控制器的模型参考自适应三相永磁同步电机高速低载波比无速度传感器控制仿真研究 - MATLAB 宝典
- 第8章-网络营销的策略组合.ppt
- (源码)基于NodeMCU的可视化通知提醒系统.zip
- 系统集成测试(SIT)报告.docx
- 基于MATLAB的GMSK系统的设计仿真.doc
- 离心风机辐射噪声仿真分析:从结构模态到声源辐射噪声的全流程解析 · 辐射噪声 深度版
- 专题讲座资料(2021-2022年)大工秋Java程序设计在线作业.docx
- (源码)基于Arduino的EDeliveryRobot.zip
- Comsol光子晶体仿真技术:拓扑荷、偏振态、三维能带及Q因子计算
- 基于非支配排序的多目标鱼鹰优化算法求解柔性作业车间调度问题的MATLAB实现
- (源码)基于多种编程语言和框架的物联网服务器与客户端.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
