Spring AOP的注解
元素 | 描述 |
@Aspect | 配置切面 |
@Pointcut | 配置切点 |
@Before | 配置前置通知 |
@After | 配置后置通知 |
@Around | 配置环绕方式 |
@AfterReturning | 配置返回通知 |
@AfterThrowing | 配置异常通知 |
下面通过一个案例演示基于注解的AOP的实现,案例具体实现步骤如下。
1、创建AnnoAdvice类,用于定义通知。
@Aspect
public class AnnoAdvice {
//切点
@Pointcut("execution( * com.mac.demo03.UserDaoImpl.*(..))")
public void poincut(){
}
//前置通知
@Before("poincut()")
public void before(JoinPoint joinPoint){
System.out.print("这是前置通知!");
System.out.print("目标类是:"+joinPoint.getTarget());
System.out.println(",被织入增强处理的目标方法为:"+
joinPoint.getSignature().getName());
}
//返回通知
@AfterReturning("poincut()")
public void afterReturning(JoinPoint joinPoint){
System.out.print("这是返回通知!");
System.out.println("被织入增强处理的目标方法为:"+
joinPoint.getSignature().getName());
}
//环绕通知
@Around("poincut()")
public Object around(ProceedingJoinPoint point) throws Throwable{
System.out.println("这是环绕通知之前的部分!");
//调用目标方法
Object object = point.proceed();
System.out.println("这是环绕通知之后的部分!");
return object;
}
//异常通知
@AfterThrowing("poincut()")
public void afterException(){
System.out.println("异常通知");
}
//后置通知
@After("poincut()")
public void after(){
System.out.println("这是后置通知!");
}
}
2、创建applicationContext-Anno.xml文件,在该文件中引入AOP命名空间,使用<bean>元素添加Spring AOP的配置信息。
<!-- 注册Bean -->
<bean name="userDao" class="com.mac.demo03.UserDaoImpl"/>
<bean name="AnnoAdvice" class="com.mac.demo04.AnnoAdvice"/>
<!-- 开启@aspectj的自动代理支持 -->
<aop:aspectj-autoproxy/>
3、创建测试类TestAnnotation,用于测试基于注解的AOP实现。
public class TestAnnotation {
public static void main(String[] args){
ApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext-Anno.xml");
UserDao userDao = context.getBean("userDao",UserDao.class);
userDao.delete();
userDao.insert();
userDao.select();
userDao.update();
}}
4、在IDEA中启动TestAnnotation类,控制台会输出结果。