首页 专题 文章 代码 归档
spring aop编程 - 全自动
2020.01.26 18:34 2020.01.26 18:34

1. Spring AOP编程

1.1. 切面类

package com.misiai.c_spring_aop;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

/**
 * 切面类中确定通知,需要实现不同接口,接口就是规范,从而就确定方法名称。
 * 采用环绕通知 MethodInterceptor
 */
public class MyAspect implements MethodInterceptor {


     //采用环绕通知
    @Override
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
        // 前置
        System.out.println("前置444");
        // 手动执行方法
        Object object = methodInvocation.proceed();
        // 后置
        System.out.println("后置444");
        return object;
    }
}

1.2. 目标类

package com.misiai.c_spring_aop;

public class UserServiceImpl implements UserService {
    @Override
    public void addUser() {
        System.out.println("Add User");
    }

    @Override
    public void updateUser() {
        System.out.println("Update User");
    }

    @Override
    public void deleteUser() {
        System.out.println("Delete User");
    }
}

1.3. spring配置

<?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: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/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

    <!--    1.目标类-->
    <bean id="userService" class="com.misiai.c_spring_aop.UserServiceImpl"/>

    <!--2.切面类-->
    <bean id="myAspect" class="com.misiai.c_spring_aop.MyAspect"/>

    <!--3.aop编程-->
    <!--
    <aop:pointcut>切入点,从目标对象获得具体方法
    <aop:advisor>特殊的切面,只有一个通知和一个切入点advice-refi知引用
    pointcut-ref切入点引用

    expression:切入点表达式
    execution(*com.misiai.c_spring_aop.*.*(..)
    选择方法 返回值任意包 类名任意     方法名任意   参数任意

    -->
    <aop:config>
        <aop:advisor advice-ref="myAspect" pointcut-ref="pointCut"/>
        <aop:aspect ref="myAspect">
            <aop:pointcut id="pointCut" expression="execution(* com.misiai.c_spring_aop.UserServiceImpl.*(..) )"/>
        </aop:aspect>
    </aop:config>

</beans>

1.4. 测试类

package com.misiai.c_spring_aop;

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

public class SpringAopTest {

    @Test
    public void test01() {
        ApplicationContext ap = new ClassPathXmlApplicationContext("applicationContext.xml");

        /*获得代理类id*/
        UserService userService = (UserService) ap.getBean("userService");
        userService.addUser();
        userService.updateUser();
        userService.deleteUser();
    }
}

结果:

截图-1580018030

本节阅读完毕! (分享
二维码图片 扫描关注我们哟