1. 引入 jar 包
AspectJ开发需要引入:
* aop的开发包:
* spring-aop-3.2.0.RELEASE.jar
* com.springsource.org.aopalliance-1.0.0.jar
* aspectJ的开发:
* com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar ---aspectJ的开发包
* spring-aspects-3.2.0.RELEASE.jar ---spring框架支持aspectj的包.
2. 创建包结构;创建spring的配置文件
3. 编写一个切面类:
编写切面的注解:
@Aspect :编写的一个类是切面类.这个类就可以写增强通知了
//对这个切面类进行一些增强 Advice 通知:
Advice的注解:
@Before 前置通知,相当于BeforeAdvice 在目标方法执行前实施增强
@AfterReturning 后置通知,相当于AfterReturningAdvice 在目标方法执行后实施增强
@Around 环绕通知,相当于MethodInterceptor 在目标方法执行前后实施增强
@AfterThrowing 抛出通知,相当于ThrowAdvice 在方法抛出异常后实施增强
@After 最终final通知,不管是否异常,该通知都会执行
@DeclareParents 引介通知,相当于IntroductionInterceptor (不用掌握)
切点表达式定义: 规定哪些类的哪些方法需要使用增强.
* execution(表达式)
* 格式:execution( 方法返回值 方法名(方法参数)异常)
* execution(* *(..))
* execution(* cn.spring3.demo1.UserDao.save(..))//执行UserDao里面的save方法;
* execution(* cn.spring3.demo1.*.save(..))//执行demo1包下所有类的save方法;
* execution(* cn.spring3.demo1..*.save(..))//执行demo1包和demo1包下所有的子包所有类下的save方法;
* execution(* cn.spring3.demo1.UserDao+.save(..))//执行UserDao子类或者实现类下所有的save方法;
定义切面类:
@Aspect // 代表当前类是一个切面类.
public class MyAspectAnno {
@Before("execution(* cn.spring3.demo1.UserDao.save(..))")
public void before(){
System.out.println("前置增强==============");
}
}
配置到Spring中:
<bean id="myAspectAnno" class="cn.itcast.spring3.demo1.MyAspectAnno"></bean>
4. 在Spring中开启注解自动代理:
<aop:aspectj-autoproxy />
5. 编写测试类 Spring和Junit整合单元测试类