第一步:导jar包

相关jar包链接:链接: https://pan.baidu.com/s/1lo8eehhJNds-8HULbJ3LuQ 提取码: fdhn

第二步:实现类与切面类

2.1、首先写一个IUserService接口:

public interface IUserService {
    void addUser();
    void updateUser();
    void deleteUser();
    String telByUserId();
}

2.2、写一个IuserService接口的实现类IUserServiceImpl

public class IUserServiceImpl implements IUserService {
    @Override
    public void addUser() {
        System.out.println("添加用户");
    }

    @Override
    public void updateUser() {
        System.out.println("更新用户");
    }

    @Override
    public void deleteUser() {
        System.out.println("删除用户");
    }

    @Override
    public String telByUserId() {
        String s = "120";
        return s;
    }
}

2.3、写一个切面类MyAspect

public class MyAspect {
    /**
     * 前置通知
     * @param joinPoint
     */
    public void myBefore(JoinPoint joinPoint){
        System.out.println(joinPoint.getSignature().getName());
        System.out.println("前置通知");
    }

    /**
     * 后置通知
     * @param joinPoint
     * @param ret
     */
    public void myAfterReturnning(JoinPoint joinPoint,Object ret){
        //第二个参数为返回值
        System.out.println(joinPoint.getSignature().getName());
        System.out.println("后置通知"+ret);
    }

    /**
     * 环绕通知
     * @param joinPoint
     * @return
     * @throws Throwable
     */
    public Object myAround(ProceedingJoinPoint joinPoint)throws Throwable{
        System.out.println("环绕通知-前");
        Object obj = joinPoint.proceed();
        System.out.println("环绕通知-后");
        return obj;
    }

    /**
     * 异常通知
     * @param joinPoint
     * @param e
     */
    public void myAfterThrowing(JoinPoint joinPoint,Throwable e){
        System.out.println("异常通知:"+e.getMessage());
    }

    /**
     * 最终通知
     */
    public void myAfter(){
        System.out.println("最终通知");
    }
}

第三步:配置beans.xml文件

注意:beans.xml文件放置在src目录下面,需要自己创建。

<?xml version="1.0" encoding="UTF-8"?>
<!--xmlns xml namespace:xml命名空间-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:p ="http://www.springframework.org/schema/p"
       xmlns:context ="http://www.springframework.org/schema/context"
       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.xsd
                           http://www.springframework.org/schema/aop
                           http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--业务类-->
<bean id="userService" class="com.xianzhou.service.Impl.IUserServiceImpl"/>
<!--切面类-->
<bean id="myAspect" class="com.xianzhou.aspect.MyAspect"/>
<aop:config>
    <aop:aspect ref="myAspect">
        <aop:pointcut id="myPointCut" expression="execution(* com.xianzhou.service.*.*(..))"/>
        <!--前置通知-->
        <!--<aop:before method="myBefore" pointcut-ref="myPointCut"/>-->
        <!--后置通知-->
        <!--<aop:after-returning method="myAfterReturnning" pointcut-ref="myPointCut" returning="ret"/>-->
        <!--环绕通知-->
        <!--<aop:around method="myAround" pointcut-ref="myPointCut"/>-->
        <!--异常通知-->
        <!--<aop:after-throwing method="myAfterThrowing" pointcut-ref="myPointCut" throwing="e"/>-->
        <!--最终通知-->
        <aop:after method="myAfter" pointcut-ref="myPointCut"/>
    </aop:aspect>
</aop:config>
</beans>

第四步:测试

写一个测试类AopTest

可使用单元测试的方法或者直接在main里面测试,单元测试需要导入JUnit4的jar包

JUnit4包的链接:链接: https://pan.baidu.com/s/1ArOw391g8k8GwHvFnjWCPQ 提取码: a6uh

public class AopTest {
    @Test
    public void test1(){
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        IUserService userService = (IUserService) context.getBean("userService");
        userService.addUser();
    }
}

第五步:输出结果