• day39-Spring 11-Spring的AOP:基于AspectJ的XML配置方式



    package cn.itcast.spring3.demo2;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    
    /**
     * 切面类
     * @author zhongzh
     *
     */
    public class MyAspectXML {
         public void before(){
             System.out.println("前置通知......");
         }
         public void afterReturning(Object returnVal){
             System.out.println("后置通知......"+returnVal);
         }
         public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{//环绕通知,可以阻止目标方法的执行.
             System.out.println("环绕前增强....");
             Object result = proceedingJoinPoint.proceed();
             System.out.println("环绕后增强....");
            return result;
         }
         //异常通知
         public void afterThrowing(Throwable e){
             System.out.println("异常通知...."+e.getMessage());
         }
         //最终通知
         public void after(){
             System.out.println("最终通知.....");
         }
    }
    package cn.itcast.spring3.demo2;
    
    public class ProductDao {
       //public void add(){
         public int add(){
           System.out.println("添加商品.......");
           int d = 10/0;
           return 100;
       }
       public void update(){
           System.out.println("修改商品.......");
       }
       public void delete(){
           System.out.println("删除商品.......");
       }
       public void find(){
           System.out.println("查询商品.......");
       }
    }
    package cn.itcast.spring3.demo2;
    
    import org.aspectj.lang.annotation.After;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext2.xml")
    public class SpringTest2 {
        @Autowired
        @Qualifier("productDao")
        private ProductDao productDao;
        
        @Test
        public void demo1(){
            productDao.add();
            productDao.find();
            productDao.update();
            productDao.delete();
        }
        
    }
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 引AOP的约束了,Schema里面必须是带有AOP的. -->
    <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="productDao" class="cn.itcast.spring3.demo2.ProductDao"></bean>
         <!-- 定义切面 -->
         <bean id="myAspectXML" class="cn.itcast.spring3.demo2.MyAspectXML"></bean>
         <!-- 定义aop配置 --><!-- 现在已经引入了AOP的名字空间 -->
         <aop:config>
             <!-- 定义切点,切点其实就是在哪些类哪些方法上应用增强 -->
             <aop:pointcut expression="execution(* cn.itcast.spring3.demo2.ProductDao.add(..))" id="mypointcut"/>
             <!-- 应用哪一个增强  advisor和aspect都是切面  advisor是一个切点和一个通知的组合 aspect是多个切点和多个通知的组合 -->
             <aop:aspect ref="myAspectXML"><!-- 定义切面 -->
                   <!-- 前置通知 -->
                   <aop:before method="before" pointcut-ref="mypointcut"/><!-- 前置通知 --><!-- 在哪个切点上面去应用前置通知 -->
                   <!-- pointcut-ref对切点的引用,是前置的还是后置的 -->
                   <!-- 后置通知  后置通知可以获取目标方法的返回值-->
                   <aop:after-returning method="afterReturning" pointcut-ref="mypointcut" returning="returnVal"></aop:after-returning><!-- pointcut-ref引入切点 -->
                   <!-- 环绕通知 -->
                   <aop:around method="around" pointcut-ref="mypointcut"></aop:around>
                   <!-- 异常通知 -->
                   <aop:after-throwing method="afterThrowing" pointcut-ref="mypointcut" throwing="e"></aop:after-throwing>
                   <!-- 最终通知 -->
                   <aop:after method="after" pointcut-ref="mypointcut"></aop:after>
             </aop:aspect>
         </aop:config>
    </beans>
  • 相关阅读:
    初学 python 之 多级菜单实现原理
    初学 python 之 用户登录实现过程
    Sqlmap使用教程
    对伪静态网站实施注射
    干货!IT小伙伴们实用的网站及工具大集合!持续更新!
    lnmp、lamp、lnmpa一键安装包(Updated: 2016-4-12)
    如何入门 Python 爬虫?
    在Windows Live Writer中插入C# code
    IIS装好后,局域网不能访问
    修改win7登录界面
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6811232.html
Copyright © 2020-2023  润新知