栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

AOP操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

AOP操作

AOP术语

1连接点

类里边哪些方法可以被增强,这些方法称为连接点

2切入点

实际被真正增强的方法,称为切入点

3通知

实际增强的逻辑部分,称为通知

通知有多种类型

*前置通知  *后置通知   *环绕通知  *异常通知  *最终通知

4切面

是动作

把通知应用到切入点的工程

AOP操作(准备工作) 1 spring框架一般是基于aspectj实现AOP操作

spectJ不是Spring组成部分,独立AOP框架,一般AspectJ和Spring框架一起使用,进行AIP操作

2 基于AspectJ实现AOP操作

(1) 基于xml配置文件实现

(2)基于注解方式实现(使用)        

3 引入相关依赖 4切入点表达式

(1)切入点表达式作用,知道对哪个类里面的哪个方法进行增强

(2)语法结构  execution([权限修饰符][返回类型][类全路径][方法名称][参数列表])

举例 1:对com.spring.dao.BookDao类里边的add方法进行增强

execution(* com.spring.dao.BookDao.add(...))

2 对BookDao类里边所有的方法进行增强

execution(* com.spring.dao.BookDao.*(...))

3 对dao包里的所有类的所有方法进行增强

execution(* com.spring.dao.*.*(..)

AOP操作(AspectJ注解)

1 创建类,在类里边定义方法

public class User {
    public void add(){
        System.out.println("add.....");
    }
}
2  创建 增强类,(编写增强逻辑)

(1) 在增强类里面,创建方法,让不同方法代表不同通知类型

//增强类
public class UserProxy {
    public void before(){
        //前置通知
        System.out.println("before......");
    }
}
3进行通知的配置 (1) 在spirng的配置文件中  开启注解扫描



(2) 使用注解 创建User和UserProy对象

@Component

(3)在增强类上面添加注解@Aspect
//增强类
@Aspect//生成代理对象
@Component
(4)在spring配置文件中开启生成代理对象
 
4 配置不同类型的通知 

在增强的类的里面,在作为通知方法的上面添加通知类型 的注解,使用切入点表达式进行配置

package com.spring.collectiontype.aopanno;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

//增强类
@Aspect//生成代理对象
@Component
public class UserProxy {
    //前置通知
    @Before(value = "execution(* com.spring.collectiontype.aopanno.User.add())")
    public void before(){
        //前置通知
        System.out.println("before......");
    }
    //后置通知  方法返回结构之后执行
    @AfterReturning(value = "execution(* com.spring.collectiontype.aopanno.User.add())")
    public void afterReturning(){
        System.out.println("afterReturning");
    }
    //环绕通知
    @Around(value = "execution(* com.spring.collectiontype.aopanno.User.add())")
    public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("环绕之前");
        proceedingJoinPoint.proceed();
        System.out.println("环绕之后");
    }
    //最终通知  方法执行之后执行
    @After(value = "execution(* com.spring.collectiontype.aopanno.User.add())")
    public void after(){
        System.out.println("after......");
    }
    //异常通知
    @AfterThrowing(value = "execution(* com.spring.collectiontype.aopanno.User.add())")
    public void afterThrowing(){
        System.out.println("afterThrowing");
    }
}

5  相同的切入点抽取

//相同切入点抽取

@Pointcut(value = "execution(* com.spring.collectiontype.aopanno.User.add())")
public void pointDemo(){

}
//前置通知
@Before(value = "pointDemo()")
public void before(){
    //前置通知
    System.out.println("before......");
}
6 有多个增强类,对同一个方法进行增强,设置增强类优先级

(1) 在增强类上面添加注解@Order(数字类型值),数字类型值越小优先级越高

@Component
@Aspect
@Order(1)
public class PersonProxy {
    @Before(value = "execution(* com.spring.collectiontype.aopanno.User.add())")
    public void afterReturning(){
        System.out.println("PersonBefore.....");
    }
7 完全注解开发
package com.spring.collectiontype;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@ComponentScan(basePackages = {"com.spring"})
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class ConfigAop {
}
AOP操作(AspectJ配置文件) 1 创建两个类,增强类和被增强类,创建方法

2 在spring配置文件中创建两个类的对象 3 在spring配置文件中配置切入点



    

    

        

        

            

        
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031940.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号