spring中AspectJ(16)

来源:互联网 发布:程序员自己创业 编辑:程序博客网 时间:2024/06/05 06:59

2016/1/18 11:44:08


1.AspectJ

  • @AspectJ的风格类似纯Java注解的普通Java类
  • Spring可以使用AspectJ来做切入点解析
  • AOP的运行时仍旧是纯的Spring AOP,对AspectJ的编译器或者织入无依赖性
  • @AspectJ切面使用@Aspect注解配置,拥有@Aspect的任何bean将被Spring自动识别注册并应用
  • 用@Aspect注解的类可以有方法和字段,它们也可能包括切入点(pointcut),通知(advice),和引入(Introduction)声明
  • Aspect注解是不能通过类路径自动检测发现的,所以需要配合使用@Component注释或者在xml配置bean
  • 一个类中的@Aspect注解标识它为一个切面,并且将自己从自动代理中排除

2.切入点的定义

  • 一个切入点可以通过一个普通的方法定义来提供,并且切入点表达式使用@Pointcut注解,方法返回类型必须为void
  • 环绕通知使用@Around注解来声明,通知方法的第一个参数必须是ProceedingJoinPoint类型
  • 在通知内部调用ProceedingJoinPoint的proceed()方法会导致执行真正的方法,传入一个Object[]对象,数组中的值将被做为参数传递给方法

    @Aspectpublic class AspectClass {    // 配置前置通知    @Before("execution(* com.lovo.inter..*.t*(..))")    public void beforeMethod() {        System.out.println("执行beforeMethod方法");    }    // 配置后置通知    @After("execution(* com.lovo.inter..*.t*(..))")    public void afterMethod() {        System.out.println("执行after方法");    }    // 配置环绕通知    @Around("execution(* com.lovo.inter..*.g*(..))")    public Object press(ProceedingJoinPoint point) {        System.out.println("环绕执行前");        Object returnObj = null;        try {            returnObj = point.proceed();        } catch (Throwable e) {            e.printStackTrace();        }        System.out.println("环绕执行后");        return returnObj;    }}
0 0
原创粉丝点击