• Spring 框架的AOP之注解的方式


    1. 环境搭建

    1.1 导入 jar 包

    • Spring 框架的基本开发包(6个);
    • Spring 的传统AOP的开发包
      • spring-aop-4.3.10.RELEASE
      • org.aopalliance-1.10.0 (在 Spring 依赖包中)
    • aspectJ 的开发包
      • org.aspectj.weave-1.6.8.RELEASE.jar (在 Spring 依赖包中)
      • spring-aspects-4.3.10.RELEASE.jar

    1.2 编写 applicationContext.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:context="http://www.springframework.org/schema/context"
    	xmlns:aop="http://www.springframework.org/schema/aop"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	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
    	http://www.springframework.org/schema/tx
    	http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        <!-- 开启自动代理 -->
        <aop:aspectj-autoproxy/>
    
        <!-- 配置目标对象 customerDao -->
        <bean id="customerDao" class="com.itheima.demo.CustomerDaoImpl"/>
    
        <!-- 配置切面类 -->
        <bean id="myAspectAnno" class="com.itheima.demo.MyAspectAnno"/>
    
    </beans>
    

    1.3 创建包结构,编写具体的接口和实现类

    • com.itheima.demo
      • CustomerDao: 接口;
      • CustomerDaoImpl: 实现类;
    • 在 applicationContext.xml 中配置
    // CustomerDao.java
        public interface CustomerDao{
            public void save();
        }
    
    // CustomerDaoImpl.java
        public class CustomerDaoImpl{
            public void save(){
                System.out.println("保存客户...");
            }
        }
    
    // 编写测试方法
        @RunWith(SpringJUnit4ClassRunner.class)
        @ContextConfiguration("classpath:applicationContext.xml")
        public class Demo{
            @Resource(name="customerDao")
            private CustomerDao customerDao;
    
            @Test
            public void fun(){
                customerDao.save();
            }
    }
    
    // 编写切面类
        @Aspect
        public class MyAspectAnno{
            // 通知(增前方法)
            // @Before(切入点表达式)
            @Before(value="execution(public void com.itheima.demo.CustomerDaoImpl.save())")
            public void log(){
                System.out.println("记录日志...");
            }
        }
    

    1.4 在 applicationContext.xml 中开启自动代理

    <aop:aspectj-autoproxy/>

    1.5 通知类型

    • @Before: 前置通知;
    • @AfterReturning: 后置通知;
    • @Around: 环绕通知;
    • @After: 最终通知;
    • @AfterThrowing: 异常抛出通知;

    1.6 配置通用的切入点

    • 使用 @Pointcut 配置通用的切入点
    // 示例
    @Aspect
    public class MyAspectAnno{
        @Before(value="MyAspectAnno.fn()")
        public void log(){
            System.out.println("记录日志...");
        }
    
        @After(value="MyAspectAnno.fn()")
        public void after(){
            System.out.println("最终通知...");
        }
    
        // 自定义切入点
        @Pointcut(value="execution(public void com.itheima.demo.CustomerDaoImpl.save())")
        public void fn(){}
    }
    

    参考资料

  • 相关阅读:
    HTML5 实现Link跳线效果
    在TWaver的Tree节点上画线
    用TWaver加载大型游戏场景一例
    22万个木箱!TWaver 3D极限压榨
    如何在MONO 3D寻找最短路路径
    如何创建TWaver 3D的轮廓选中效果
    巧用TWaver 3D 矢量图形功能
    如何实现TWaver 3D颜色渐变
    HDU 1390 Binary Numbers
    HDU 1328 IBM Minus One
  • 原文地址:https://www.cnblogs.com/linkworld/p/7721857.html
Copyright © 2020-2023  润新知