Spring

spring 的aop操作,基于aspectj的注解

2018-06-07  本文已影响4人  DouDouZH

一、步骤

1、用配置创建对象
image.png
2、在spring配置文件里开启aop的扫描操作
image.png
3、在增强的类上用注解和方法上用具体的注解
image.png

二、代码

切点user.java

package work.zhangdoudou.aop;

public class User {
    
    public void addUser() {
        System.out.println("addUser----------");
    }
}

增强/通知UserAop.java

package work.zhangdoudou.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class UserAop {
    
    //在方法上用注解配置
    @Before(value="execution(* work.zhangdoudou.aop.User.*(..))")
    public void before() {
        System.out.println("前置增强------------");
    }
    
    @AfterReturning(value="execution(* work.zhangdoudou.aop.User.*(..))")
    public void afterReturning() {
        System.out.println("后置增强------------");
    }
    
    @After(value="execution(* work.zhangdoudou.aop.User.*(..))")
    public void after() {
        System.out.println("最终增强------------"); 
    }
    
    //环绕通知
    @Around(value="execution(* work.zhangdoudou.aop.User.*(..))")
    public void around(ProceedingJoinPoint point) throws Throwable {
        //执行之前
        System.out.println("环绕-方法执行之前----");
        
        //执行被增强的方法
        point.proceed();
        
        //执行之后
        System.out.println("环绕-方法执行之后----");
    }
    
    //异常通知
    @AfterThrowing(value="execution(* work.zhangdoudou.aop.User.*(..))")
    public void afterThrowing() {
        System.out.println("异常通知-----------");
        
    }
}

配置applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
                        http://www.springframework.org/schema/beans/spring-beans.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-4.0.xsd
                         http://www.springframework.org/schema/aop 
                        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

    <!--1 配置对象 -->
    <bean id="user" class="work.zhangdoudou.aop.User"></bean>
    <bean id="userAop" class="work.zhangdoudou.aop.UserAop"></bean>
    
    <!--开启aop的操作  开启自动代理 -->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

测试Test2.java

package work.zhangdoudou.test;

import static org.junit.Assert.*;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import work.zhangdoudou.aop.Book;
import work.zhangdoudou.aop.User;

public class Test2 {

    @Test
    public void test() {
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        User user=(User)context.getBean("user");
        user.addUser();
    }
}

三、运行结果

image.png
上一篇 下一篇

猜你喜欢

热点阅读