zoukankan      html  css  js  c++  java
  • Spring框架的AOP技术(注解方式)

    1. 步骤一:创建JavaWEB项目,引入具体的开发的jar包
        * 先引入Spring框架开发的基本开发包
        * 再引入Spring框架的AOP的开发包
            * spring的传统AOP的开发的包
                * spring-aop-4.2.4.RELEASE.jar
                * com.springsource.org.aopalliance-1.0.0.jar
    
            * aspectJ的开发包
                * com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
                * spring-aspects-4.2.4.RELEASE.jar
    
    2. 步骤二:创建Spring的配置文件,引入具体的AOP的schema约束
        <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">
    
        </beans>
    
    3. 步骤三:创建包结构,编写具体的接口和实现类
        * com.huida.demo1
            * CustomerDao           -- 接口
    package com.huid.demo1;
    
    public interface CustomerDao {
    
        public void save();
        public void update();
    }
            * CustomerDaoImpl       -- 实现类
    package com.huid.demo1;
    
    public class CustomerDaoImpl implements CustomerDao {
    
        @Override
        public void save() {
            System.out.println("保存客户");
    
        }
    
        @Override
        public void update() {
            System.out.println("修改客户");
    
        }
    
    }
    4. 步骤四:将目标类配置到Spring中
        <bean id="customerDao" class="com.huida.demo1.CustomerDaoImpl"/>
    
    5. 步骤五:定义切面类
        * 添加切面和通知的注解
            * @Aspect                   -- 定义切面类的注解
    
            * 通知类型(注解的参数是切入点的表达式)
                * @Before               -- 前置通知
                * @AfterReturing        -- 后置通知
                * @Around               -- 环绕通知
                * @After                -- 最终通知
                * @AfterThrowing        -- 异常抛出通知
    
        * 具体的代码如下
            @Aspect
            public class MyAspectAnno {
                @Before(value="execution(public void com.huida.demo1.CustomerDaoImpl.save())")
                public void log(){
                    System.out.println("记录日志...");
                }
            }
      当切入类中有很多通知时,如果一直使用原来的@Before(value="....")这种方式,则需要重复写很多次value="....."。很冗余,所以我们定义一个自定义切入点的方法:
         @PointCut(value="execution(public void com.huida.demo1.CustomerDaoImpl.save())")
         public void fn(){}//这个函数名可以任意定义
      当我们再次写通知的时候,不必写为@Before(value="execution(public void com.huida.demo1.CustomerDaoImpl.save())"),而可以写为@Before(value="MyAspectAnno.fn()")
    6. 步骤六:在配置文件中定义切面类 <bean id="myAspectAnno" class="com.huida.demo1.MyAspectAnno"/> 7. 步骤七:在配置文件中开启自动代理 <aop:aspectj-autoproxy/> 8. 完成测试 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class Demo1 { @Resource(name="customerDao") private CustomerDao customerDao; @Test public void run1(){ customerDao.save(); customerDao.update(); } }
  • 相关阅读:
    BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第14章节--使用Office Services开发应用程序 总结
    修改sepolicy后编译出现‘Error while expanding policy’【转】
    memalign的作用【转】
    Linux 使用statvfs读取文件系统信息
    strerror函数的总结【转】
    UFS 介绍 1[【转】
    EMMC 介绍【转】
    何为TLC、MLC、SLC?【转】
    赞 ( 84 ) 微信好友 新浪微博 QQ空间 180 SSD故事会(14):怕TLC因为你不了解!【转】
    RPMB分区介绍【转】
  • 原文地址:https://www.cnblogs.com/wyhluckdog/p/10132726.html
Copyright © 2011-2022 走看看