Spring AOP的注解方式

建立工程,导入jar包

1、首先说一下基于XMl方式的AOP配置,就从helloword开始吧

2、数据访问层省略,直接进到业务层

建立com.springdemo.service包以及他的实现包

建立一个借口

package com.springdemo.service;

public interface IHelloworldService {

    public void sayHello();
}
 

建立他的实现类

package com.springdemo.service.impl;

import com.springdemo.service.IHelloworldService;

public class HellowoldService implements IHelloworldService{

    public void sayHello() {
      System.out.println("Hello World");
    }
}

 创建一个切面类

package com.springdemo.aspect;

public class HelloAspect {

    public void beforeAdvice(){
        System.out.println("前置增强");
    }

    public void afterAdvice(){
        System.out.println("后置增强");
    }
}

 实际也不算是切面类

下面进入到XML的配置

配置一个目标实现类的bean和切面类的bean

 <!--配置目标类,配置的是实现方法  -->
    <bean id="helloworldService"  class="com.springdemo.service.impl.HellowoldService"/>

    <!--配置切面  -->
    <bean id="helloAspect"  class="com.springdemo.aspect.HelloAspect"/>

 下面进行切面的配置:

<!--配置切点  -->
    <aop:config>
        <aop:pointcut id="pointcut" expression="execution(* com.springdemo.service.impl.*.*(..))"/><!--配置切点 第一个*代表所有的返回值类型,第二个*代表所有的类,第三个*代表类所有方法,最后一个..代表所有的参数。 -->
        <aop:aspect ref="helloAspect"> <!-- 配置切面,引入切面类的bean-->
              <aop:before method="beforeAdvice" pointcut-ref="pointcut" />
              <aop:after method="afterAdvice" pointcut="execution(* com.springdemo.service.impl.*.*(..))"/><!--在aop的增强中,可以通过pointcut-ref来制定原有的切入点,也可以通过pointcut来定义切入点,二者不能同时使用-->
        </aop:aspect>

    </aop:config>

 再写个测试类就OK了,效果如下图:

基于XML的简单配置就完成了

下面说一下基于注解的配置:

想要使用注解的方式,就要在配置文件中加入

    <!--支持注解方式的aop-->
    <aop:aspectj-autoproxy/>

 这样才能支持注解的方式

业务层的没有任何变化,在切面类中加入一个point方法,用来注入切入点

@Pointcut("execution(* com.springdemo.service.impl.*.*(..))")
    public void point(){                     //声明切入点 ,切入点的表达式

    }

 把原来XML里的<aop:config/>一段给注释掉,在切面类中的前置增强和后置增强的方法稍作修改,修改如下

@Aspect
public class HelloAspect {

    ......

    @Before("point()")
    public void beforeAdvice(){
        System.out.println("前置增强");
    }

    @After("point()")
    public void afterAdvice(){
        System.out.println("后置增强");
    }
}
 

再次测试一下,与基于XML的结果一样

简单的注解方式的AOP配置就完成了,比较简单,留下来以后复习,关于带参的@Aspect以及概念,请看http://jinnianshilongnian.iteye.com/blog/1420689 这一系列的文章(感觉太多了,记不住)

猜你喜欢

转载自yingruochen.iteye.com/blog/1538662