zoukankan      html  css  js  c++  java
  • Spring学习笔记06-AOP(三)(第八周)

     

    第八周

    所花时间

    25h左右

    代码量

    2000行左右

    博客量

    6篇

    学到的知识点

    世界疫情的可视化图表,爬取世界疫情的数据,Spring中的AOP

     

    摘要:前两天学习了基于注解配置AOP的方法,今天学习了通过配置文件来配置AOP的方法,两者没有本质的区别,但是通过使用,感觉通过配置文件来配置AOP更好理解,而且使用起来更简易。下面通过简单实例来说明

    一、导入所依赖的相关jar包

    二、核心部分:在xml文件中配置相关的bean以及AOP

    <?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.3.xsd">
    
        <!-- 配置bean -->
        <bean id="yunsuan" class="peizhiwenjianAOP.YunsuanImpl"></bean>
    
        <!-- 配置切面的bean -->
        <bean id="qiemian" class="peizhiwenjianAOP.Qiemian"></bean>
        <bean id="qiemianyouxianji"
            class="peizhiwenjianAOP.QiemianYouxianji"></bean>
            
        <!-- 配置AOP -->
        <aop:config>
            <!-- 配置切点表达式 -->
            <aop:pointcut
                expression="execution(* peizhiwenjianAOP.*.*(int,int))" id="pointcut" />
            <!-- 配置切面及通知 -->
            <aop:aspect ref="qiemian" order="2">
                <aop:before method="before" pointcut-ref="pointcut" />
                <aop:after method="after" pointcut-ref="pointcut" />
                <aop:after-throwing method="afterThrowing"
                    pointcut-ref="pointcut" throwing="e" />
                <aop:after-returning method="afterReturning"
                    pointcut-ref="pointcut" returning="result" />
                <!-- <aop:around method="around" pointcut-ref="pointcut"/> -->
            </aop:aspect>
            <aop:aspect ref="qiemianyouxianji" order="1">
                <aop:before method="youxianji" pointcut-ref="pointcut" />
            </aop:aspect>
        </aop:config>
    </beans>
    peizhiwenjianAOP.xml

    三、其他部分代码

    package peizhiwenjianAOP;
    
    public interface Yunsuan {
        
        int add(int i,int j);
        int sub(int i,int j);
        int mul(int i,int j);
        int div(int i,int j);
    
    }
    Yunsuan.java
    package peizhiwenjianAOP;
    
    import org.springframework.stereotype.Component;
    
    @Component
    public class YunsuanImpl implements Yunsuan {
    
        @Override
        public int add(int i, int j) {
            //System.out.println("begin"+i+","+j);
            int result=i+j;
            //System.out.println("end"+result);
            return result;
        }
    
        @Override
        public int sub(int i, int j) {
            //System.out.println("begin"+i+","+j);
            int result=i-j;
            //System.out.println("end"+result);
            return result;
        }
    
        @Override
        public int mul(int i, int j) {
            //System.out.println("begin"+i+","+j);
            int result=i*j;
            //System.out.println("end"+result);
            return result;
        }
    
        @Override
        public int div(int i, int j) {
            //System.out.println("begin"+i+","+j);
            int result=i/j;
            //System.out.println("end"+result);
            return result;
        }
    
    }
    YunsuanImpl .java
    package peizhiwenjianAOP;
    
    import java.util.Arrays;
    import java.util.List;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    
    
    public class Qiemian {
    
    
        public void before(JoinPoint joinpoint) {
            String name=joinpoint.getSignature().getName();
            List<Object> args=Arrays.asList(joinpoint.getArgs());
            System.out.println(name+" begin "+args);
        }
    
        public void after(JoinPoint joinpoint) {
            String name=joinpoint.getSignature().getName();
            //不能返回目标方法执行的结果
            //List<Object> args=Arrays.asList(joinpoint.getArgs());
            System.out.println(name+" end ");
        }
    
        public void afterReturning(JoinPoint joinpoint,Object result) {
            String name=joinpoint.getSignature().getName();
            System.out.println(name+" end with " + result);
        }
    
        public void afterThrowing(JoinPoint joinpoint,Exception e) {
            String name=joinpoint.getSignature().getName();
            System.out.println(name+" exception " + e);
        }
    
    
        public Object around(ProceedingJoinPoint pdj) {
            Object result=null;
            String name=pdj.getSignature().getName();
            //执行目标方法
            try {
                //前置通知
                System.out.println(name+" begin with " + Arrays.asList(pdj.getArgs()));
                result = pdj.proceed();
                //后置通知
                System.out.println(name+" end with " + Arrays.asList(pdj.getArgs()));
            } catch (Throwable e) {
                // TODO 自动生成的 catch 块
                //异常通知
                System.out.println(name+" exception " + e);
                throw new RuntimeException(e);
            }
            //后置通知
            System.out.println(name+" end ");
            return result;
        }
    }
    Qiemian.java
    package peizhiwenjianAOP;
    
    
    public class QiemianYouxianji {
        
        public void youxianji() {
             System.out.println("我最快");
        }
    
    }
    QiemianYouxianji .java
    package peizhiwenjianAOP;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Main {
    
        public static void main(String[] args) {
            ApplicationContext c=new ClassPathXmlApplicationContext("peizhiwenjianAOP.xml");
            Yunsuan yunsuan=c.getBean(Yunsuan.class);
            int result=yunsuan.add(3, 0);
            System.out.println("result="+result);
            int re=yunsuan.div(3, 0);
            System.out.println("result="+re);
        }
    }
    Main .java

  • 相关阅读:
    最近一月研报推荐次数最多的最热股票
    【2019年07月22日】A股最便宜的股票
    【07月19日】指数估值排名
    北上资金近1周流入排行榜
    主要股东近3年净买入排名
    【07月16日】A股滚动市净率PB历史新低排名
    【07月15日】A股滚动市盈率PE最低排名
    最近3年股息率最高排名
    主要股东近3年净买入排名
    【07月09日】预分红股息率最高排名
  • 原文地址:https://www.cnblogs.com/MoooJL/p/12678405.html
Copyright © 2011-2022 走看看