整了2天的aop-spring2

项目的日志部分由我负责,哎,本来以为spring2的aop能有多难,spring1的会了,2的肯定也手到擒来,没想到,就这个整整花了我2天的时间才摆平,都崩溃了.
下面简单地写下代码和配置:
@Transactional          //spring事务的支持
@Aspect //声明切面
public class LogService {
private ApamLogDAO apamLogDAO; //依赖注入dao,为节省版面就省略get,set了
private ApamLog apamLog; //声明日志的model类
private Asppoi asppoi;
private Account account;

// insert切入点
// 这里的execution表达式是最复杂的部分,其实不难,主要是没有什么文档能把描述得很详细,连spring2的官方文档也只是概括地点了下
@Pointcut("execution(* com.olemap.apam.dao.AsppoiDAO.save(..))")
public void PointcutSave() {
}

// insert通告
@AfterReturning(pointcut = "PointcutSave()", returning = "status")
public void AdviceSave(ProceedingJoinPoint joinPoint, Object status) {
asppoi = (Asppoi) joinPoint.getArgs()[0];
account = (Account) joinPoint.getArgs()[1];
apamLog = new ApamLog();
apamLog.setAccount(account);
apamLog.setAction("insert");
apamLog.setAsppoi(asppoi);
apamLog.setStatus(Byte.parseByte(status.toString()));
apamLog.setTime(new Date());
apamLogDAO.save(apamLog);
}
}

另外在spring的配置文件里,需要加上

<aop:aspectj-autoproxy proxy-target-class="true"/>


下面慢慢来解释:
一.spring2支持的增强类型:
before after afterReturning afterThrowing around

光名字就很好理解了,主要就是after,afterReturning的区别,在我这个模块上,我用了afterReturning,它可以让你的增强(advise)可以获得切入点的返回值.

二.签名语法:
call/execution/withincode(MethodPart)-方法调用/方法执行/在方法体内,MethodPart代表方法签名,execution较常用 (call我用了,但是始终报错,还没能试出它的用法)
MethodPart的语法结构是
[Modifier] Type [ClassType.] methodName(ArgumentType1...N...) [throws ExceptionType]
public void com.olemap.apam.dao.TestDAO.save(..) throws Exception

上面的语法是对应的,需要注意的是
1.加中括号的就是可选的部分
2.'..'是指所有的参数类型
3.可以用*来代表泛指

三.获得原方法形参的方法ProceedingJoinPoint
org.aspectj.lang.ProceedingJoinPoint表示连接点对象,通过getArgs()可以获得个连接点方法参数的数组

四.获得切入点方法返回值
在afterReturning那设置returning属性,并加在增强方法的形参处

除了注解实现外,另外还有xml文件配置,aspect语言2种方法实现,我会进一步去研究的.

以上是我这2天的成果,一次又一次的错误磨出来的,假如有什么错误或者有什么更好的方法,希望您指点下我.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值