8.4Java EE——基于注解的AOP实现

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类,控制台会输出结果。6059c745f83b4e8a8d26c8c1673026ea.png

猜你喜欢

转载自blog.csdn.net/W_Fe5/article/details/131892680