• Spring学习03——AOP Demo


    切面类StudentServiceAspect.java

    package com.su.advice;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    
    public class StudentServiceAspect {
    
        public void doBefore(JoinPoint jp){
            System.out.println("类名:"+jp.getTarget().getClass().getName());
            System.out.println("方法名:"+jp.getSignature().getName());
            System.out.println("开始添加学生:");
        }
        
        public void doAfter(JoinPoint jp){
            System.out.println("类名:"+jp.getTarget().getClass().getName());
            System.out.println("方法名:"+jp.getSignature().getName());
            System.out.println("学生添加完成:"+jp.getArgs()[0]);
        }
        
        public Object doAround(ProceedingJoinPoint pjp) throws Throwable{
            System.out.println("添加学生前");
            Object retVal=pjp.proceed();
            System.out.println(retVal);
            System.out.println("添加学生后");
            return retVal;
        }
        
        public void doAfterReturning(JoinPoint jp){
            System.out.println("返回通知");
        }
        
        public void doAfterThrowing(JoinPoint jp,Throwable ex){
            System.out.println("异常通知");
            System.out.println("异常信息:"+ex.getMessage());
        }
    }

    接口StudentService

    package com.su.service;
    
    public interface StudentService {
    
        public void addStudent(String name);
    }

    接口的实现类StudentServiceImpl

    package com.su.service.impl;
    
    import com.su.service.StudentService;
    
    public class StudentServiceImpl implements StudentService{
    
        @Override
        public void addStudent(String name) {
            // System.out.println("开始添加学生"+name);
            System.out.println("添加学生"+name);// System.out.println("完成学生"+name+"的添加");
        }
    
    }

    测试类

    package com.su.test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.su.service.StudentService;
    
    
    public class T {
    
        public static void main(String[] args) {
            ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
            StudentService studentService=(StudentService)ac.getBean("studentService");
            studentService.addStudent("张三");
            
        }
        
    
    }

    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: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.xsd">
        
        <bean id="studentServiceAspect" class="com.su.advice.StudentServiceAspect"></bean>
        
        <bean id="studentService" class="com.su.service.impl.StudentServiceImpl"></bean>
        
        <aop:config>
            <aop:aspect id="studentServiceAspect" ref="studentServiceAspect">
                <aop:pointcut expression="execution(* com.su.service.*.*(..))" id="businessService"/>
                <aop:before method="doBefore" pointcut-ref="businessService"/><!-- 将doBefore切入 切点配置的方法中 -->
                <aop:after method="doAfter" pointcut-ref="businessService"/>
                <aop:around method="doAround" pointcut-ref="businessService"/>
                <aop:after-returning method="doAfterReturning" pointcut-ref="businessService"/>
                <aop:after-throwing method="doAfterThrowing" pointcut-ref="businessService" throwing="ex"/> 
            </aop:aspect> 
        </aop:config>
    </beans>

    如果只配置doBefore、doAfter,只切入这两个方法的话,执行结果如图

  • 相关阅读:
    juniper ALARM亮红灯
    笔记本设置wifi热点
    基于apache+php+mysql 编译安装详解(转载)
    CentOS6.X 安装MySQL 5.X
    spring 多数据源切换
    Java Reflection(十二):动态类加载与重载
    Java Reflection(十一):动态代理
    Java Reflection(十):数组
    Java Reflection(九):泛型
    Java Reflection(八):注解
  • 原文地址:https://www.cnblogs.com/zzmb/p/8514105.html
Copyright © 2020-2023  润新知