spring注解方式AOP
引入相关依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.2</version>
</dependency>
spring文件配置:1、aop的xsd引入。2、<aop:aspectj-autoproxy/>标签:支持以注解方式实现切面
切面类编写:
就这么不知不觉完成了。。。下面来说说关键注解Pointcut 的用法。
Pointcut 的execution
ps:Pointcut定义时,还可以使用&&、||、!,并且可以使用其他的切入点:
对所有标记了指定注解的类做切面的方法: 该类必须要给spring容器管理
其他注解:
- @Before("anyMethod() && args(name)")
- public void doAccessCheck(String name){
- System.out.println(name);
- System.out.println("前置通知");
- }
- @AfterReturning("anyMethod()")
- public void doAfter(){
- System.out.println("后置通知");
- }
- @After("anyMethod()")
- public void after(){
- System.out.println("最终通知");
- }
- @AfterThrowing("anyMethod()")
- public void doAfterThrow(){
- System.out.println("例外通知");
- }
- @Around("anyMethod()")
- public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable{
- System.out.println("进入环绕通知");
- Object object = pjp.proceed();//执行该方法
- System.out.println("退出方法");
- return object;
- }