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(); } }
posted on 2018-12-17 17:29  wyhluckydog  阅读(171)  评论(0编辑  收藏  举报