使用spring配置文件实现AOP

<bean id="personService" class="com.saly.service.impl.PersonServiceBean"/>
    <bean id="aspetbean" class="com.saly.service.MyInterceptor"/>
    <aop:config>
        <aop:aspect id="asp" ref="aspetbean">
        <aop:pointcut id="mycut" expression="execution(* com.saly.service.impl.PersonServiceBean.*(..))"/>
            <aop:before pointcut-ref="mycut" method="doAccessCheck" />
            <aop:after-returning pointcut-ref="mycut" method="doAccessCheckAfter"/>
            <aop:after-throwing pointcut-ref="mycut" method="doAfterThrowing"/>
            <aop:after pointcut-ref="mycut" method="doAccessCheckFinally"/>
            <aop:around pointcut-ref="mycut" method="doBasicProfiling"/>
        </aop:aspect>

    </aop:config>



package com.saly.service;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

/**
 * 必须交给spring管理
 * 注解方式:@Component
 * 配置方式:<bean id="myInterceptor" class="com.saly.service.MyInterceptor">
 * @author saly
 *
 */
@Aspect
public class MyInterceptor {

    /*
     * @Pointcut("execution (* com.saly.service..*.*.(..))")
     * 第一个※代表返回类型(任何类型),
     * 第一个..对子包进行拦截,
     * 第二个※对哪个类拦截(对所有类拦截),
     * 第三个※代表所有方法,括号中的两个..代表参数任意
     *
     */
    //对所有方法进行拦截,参数任意
    private void anyMethod(){}//声明一个切入点
    

    public void doAccessCheck(){//只能拦截到参数为一个切是string类型的方法
        System.out.println("前置通知");
    }
    //只能拦截返回值是string类型的方法
    public void doAccessCheckAfter(){
        System.out.println("后置通知");
    }
    
    public void doAccessCheckFinally(){
        System.out.println("最终通知");
    }
    //列外信息作为参数传入到doAfterThrowing方法中
    public void doAfterThrowing(){
        System.out.println("例外通知");
    }
    //环绕通知,struts2做权限控制//可以替换以上其他方法
    
    public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
        //if(){//判断用户是否在权限
        System.out.println("进入方法");
        Object result = pjp.proceed();
        System.out.println("退出方法");
        //}
        return result;
    }
}


常见配置
(1)execution(java.lang.String com.saly.service.impl.PersonServiceBean.*(..))
拦截返回参数是string的所有方法
(2)execution(* com.saly.service.impl.PersonServiceBean.*(java.lang.String,..))
拦截第一个参数是string类型的所有方法
(3)execution(!void com.saly.service.impl.PersonServiceBean.*(..))
拦截所有返回类型非 void的所有方法
(4)execution(* com.saly.service..*.*(..))
对包和子包下的所有方法进行拦截






















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值