zoukankan      html  css  js  c++  java
  • XML方式实现AOP编程

    Xml实现aop编程:

             1) 引入jar文件  【aop 相关jar, 4个】

             2) 引入aop名称空间

             3)aop 配置

                       * 配置切面类 (重复执行代码形成的类)

                       * aop配置

                                拦截哪些方法 / 拦截到方法后应用通知代码

    package loaderman.f_aop_xml;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.After;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.AfterThrowing;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.stereotype.Component;
    
    // 切面类
    public class Aop {
    
        public void begin(){
            System.out.println("开始事务/异常");
        }
    
        public void after(){
            System.out.println("提交事务/关闭");
        }
    
        public void afterReturning() {
            System.out.println("afterReturning()");
        }
    
        public void afterThrowing(){
            System.out.println("afterThrowing()");
        }
    
        public void around(ProceedingJoinPoint pjp) throws Throwable{
            System.out.println("环绕前....");
            pjp.proceed();  // 执行目标方法
            System.out.println("环绕后....");
        }
    
    }
    package loaderman.f_aop_xml;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class App {
    
        ApplicationContext ac =
                new ClassPathXmlApplicationContext("cn/loaderman/f_aop_xml/bean.xml");
    
        // 目标对象有实现接口,spring会自动选择“JDK代理”
        @Test
        public void testApp() {
            IUserDao userDao = (IUserDao) ac.getBean("userDao");
            System.out.println(userDao.getClass());//$Proxy001
            userDao.save();
        }
    
        // 目标对象没有实现接口, spring会用“cglib代理”
        @Test
        public void testCglib() {
            OrderDao orderDao = (OrderDao) ac.getBean("orderDao");
            System.out.println(orderDao.getClass());
            orderDao.save();
        }
    }
    package loaderman.f_aop_xml;
    
    
    public interface IUserDao {
        void save();
    }
    package loaderman.f_aop_xml;
    
    /**
     * 目标对象
     *
     */
    public class OrderDao{
    
        public void save() {
            System.out.println("-----核心业务:保存!!!------");
        }
    
    }
    package loaderman.f_aop_xml;
    
    
    /**
     * 目标对象
     *
     */
    public class UserDao implements IUserDao{
    
        @Override
        public void save() {
            System.out.println("-----核心业务:保存!!!------");
        }
    }
    <?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:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        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/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">
        
        <!-- dao 实例 -->
        <bean id="userDao" class="loaderman.f_aop_xml.UserDao"></bean>
        <bean id="orderDao" class="loaderman.f_aop_xml.OrderDao"></bean>
        
        <!-- 切面类 -->
        <bean id="aop" class="loaderman.f_aop_xml.Aop"></bean>
        
        <!-- Aop配置 -->
        <aop:config>
            <!-- 定义一个切入点表达式: 拦截哪些方法 -->
            <aop:pointcut expression="execution(* loaderman.f_aop_xml.*.*(..))" id="pt"/>
            <!-- 切面 -->
            <aop:aspect ref="aop">
                <!-- 环绕通知 -->
                <aop:around method="around" pointcut-ref="pt"/>
                <!-- 前置通知: 在目标方法调用前执行 -->
                <aop:before method="begin" pointcut-ref="pt"/>
                <!-- 后置通知: -->
                <aop:after method="after" pointcut-ref="pt"/>
                <!-- 返回后通知 -->
                <aop:after-returning method="afterReturning" pointcut-ref="pt"/>
                <!-- 异常通知 -->
                <aop:after-throwing method="afterThrowing" pointcut-ref="pt"/>
                
            </aop:aspect>
        </aop:config>
    </beans>      

  • 相关阅读:
    将kali linux装入U盘 制作随身携带的kali linux
    arch/manjaro linux configuration
    python资源

    JSP通过AJAX获取服务端的时间,在页面上自动更新
    Spark基础
    MapReduce基础
    HDFS基础
    C#输出杨辉三角形
    Java窗体居中显示的2种方法
  • 原文地址:https://www.cnblogs.com/loaderman/p/10042858.html
Copyright © 2011-2022 走看看