Spring中基于AspectJ的AOP切面编程介绍及实现

简介:

  1. AOP Aspect Oriented Programing 面向切面编程
  2. AOP采取==横向抽取==机制,取代了传统==纵向继承==体系重复性代码(性能监视、事务管理、安全检查、缓存)
  3. Spring中的Aop是纯Java来实现的,使用==动态代理==的方式增强代码
  4. AOP不是由Spring提出来的,是由AOP联盟定义的

专业术语:

  1. Joinpoint(连接点) :委托类中可以被增强的方法
  2. ==Pointcut(切入点) :切点 ,要被增强的方法==
  3. ==Advice(通知/增强) :增强的代码==
  4. Target(目标对象) :委托对象
  5. Weaving(织入) :把增强应用切点的过程
  6. Proxy(代理): 一个类被AOP织入增强后,就产生一个结果代理类
  7. ==Aspect(切面): 是切点通知的结合==

Aspect的增强类型:

  1. @Before 前置通知
  2. @AfterReturning 后置通知
  3. @Around 环绕通知
  4. @AfterThrowing抛出通知
  5. @After 最终final通知

实现:

 

1.引入pom依赖


    org.springframework
    spring-context
    4.3.10.RELEASE




    junit
    junit
    4.12



    org.springframework
    spring-test
    4.3.10.RELEASE



    org.springframework
    spring-aspects
    4.3.10.RELEASE

2.配置自动代理和注解扫描器



    
    

    
    

3.编写dao(委托类)

package com.it.bigdata;
import com.sun.xml.internal.bind.v2.model.core.ID;
import org.springframework.stereotype.Repository;
@Repository
public class UserDao {
    public void addUser(User user) {
        System.out.println("添加用户.." + user);
    }

    public void deleteUser(Integer id) {
        System.out.println("删除用户" + id);
    }

    public void findUser(Integer id) {
        System.out.println("查询用户" + id);
    }

    public void updateUser(Integer id) {
        System.out.println("修改用户" + id);
    }
}

4.编写切面

package com.it.bigdata;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

/**
 * 切面 = 切点(切点表达式) + 通知(要增强的代码,方法)
 */
@Aspect
@Component
public class MyAspect {
    /**
     * 通知
     */
    @Before("execution( * com.it.bigdata.UserDao.delete*(..))")
    public void advice1() {
        System.out.println("通知1");
    }
}

5.调用dao的方法

userDao.deleteUser(12);

 

你可能感兴趣的:(精研细究)