Spring-AOP基于JAVA注解实现

1.选择切面切点或者连接点
定义一个需要切面的接口

//Spring-AOP编程是基于方法的切面编程,及只能在方法前后进行切面编程
//现在就对下面这个接口中的方法进行切面编程
public interface Performance{
    public void perform();
}

使用java表达式语言进行切点的编写

//表达式( 任意返回值 cencert包下的Perfromance类下的perform方法 切面)
execution( * concert.Performance.perform())

2.使用注解创建切面
定义切面

@Aspect
public class Audience{

    @Before("execution( * concert.Performance.perform())")
    public void say(){
        system.out.println("前置通知切面");
}
    @AfterReturning("execution( * concert.Performance.perform())")
    public void say(){
        system.out.println("后置通知切面");
}
}

1.定义切点:定义一个需要进行切面编程的接口方法
2.编写切点表达式:通过表达式可以将需要切面编程的方法,方便的放到切面中
3.编写切面:使用@Aspect定义一个切面类,在方法上添加切面类型注解@Before,@AfterReturning将这个方法分别编织到切点之前后之后。

3.以上操作还不能创建一个通知Spring,需要在Spring中配置Audience为切面

<context:compent-scan base-package="xxxx" / >自动扫描bean装配到spring中
<aop:aspectj-autoproxy />启用Aspectj自动代理
<bean class="xxx.xxx"/>什么bean

对于上面的这种操作需要注意:Spring的AspectJ自动代理仅仅使用@AspectJ作为创建切面的指导,切面依然是基于代理的。在本质上,它依然是Spring基于代理的切面。这一点非常重要,因为这就意味着尽管使用的是@AspectJ注解,但是我们仍然限于代理方法的调用。如果想要利用AspectJ的所有能力,我们必须仅仅使用AspectJ并不依赖Spring来创建基于代理的切面。

另外还有一种更为方便的方式通过Spring的AOP命名空间进行基于XML配置的aop切面实现。

你可能感兴趣的:(aop)