Aop温故

2024-04-16 11:58
文章标签 aop 温故

本文主要是介绍Aop温故,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时,使用org.aspectj.lang.ProceedingJoinPoint表示连接点对象,该类是JoinPoint的子接口。任何一个增强方法都可以通过将第一个入参声明为JoinPoint访问到连接点上下文的信息。我们先来了解一下这两个接口的主要方法: 
1)JoinPoint 
java.lang.Object[] getArgs():获取连接点方法运行时的入参列表; 
Signature getSignature() :获取连接点的方法签名对象; 
java.lang.Object getTarget() :获取连接点所在的目标对象; 
java.lang.Object getThis() :获取代理对象本身; /**
* 声明一个注解 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Action {String name(); }
@Service
public class DemoAnnotationService {@Action(name="注解式拦截的add操作")public void add(){}
}
 
@Service
public class DemoMethodService {public void add(){}
}

@Aspect
@Component //配置为bean
public class LogAspect {@Pointcut("@annotation(com.wisely.aop.Action)")//申明一个切面,供重复使用
    public void annotationPointCut(){}/**
     * joinPoint主要用于和被代理类交互,前面对该类有解释说明
     * @param joinPoint
     */
    @After("annotationPointCut()")public void after(JoinPoint joinPoint){MethodSignature signature=(MethodSignature)joinPoint.getSignature();
        Method method=signature.getMethod();
        Action action=method.getAnnotation(Action.class);
        System.out.println("注解式拦截 "+action.name());
    }@Before("execution(* com.wisely.aop.DemoMethodService.*(..))")public void before(JoinPoint joinPoint){MethodSignature signature=(MethodSignature)joinPoint.getSignature();
        Method method=signature.getMethod();
        System.out.println("方法规则式拦截,"+method.getName());
    }
}

@Configuration//该类为配置类
@ComponentScan("com.wisely.aop")//扫描包下所有使用@Service,@Component,@Repository,@Controller的类并注册为bean
@EnableAspectJAutoProxy //该注解用于开启Spring对AspectJ的支持
public class AopConfig {
}


public class Main {public static void main(String[] args){AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(AopConfig.class);
        DemoAnnotationService demoAnnotationService=context.getBean(DemoAnnotationService.class);
        DemoMethodService demoMethodService=context.getBean(DemoMethodService.class);
        demoAnnotationService.add();
        demoMethodService.add();
        context.close();
    }
}

这篇关于Aop温故的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/908732

相关文章

SSM项目使用AOP技术进行日志记录

本步骤只记录完成切面所需的必要代码 本人开发中遇到的问题: 切面一直切不进去,最后发现需要在springMVC的核心配置文件中中开启注解驱动才可以,只在spring的核心配置文件中开启是不会在web项目中生效的。 之后按照下面的代码进行配置,然后前端在访问controller层中的路径时即可观察到日志已经被正常记录到数据库,代码中有部分注释,看不懂的可以参照注释。接下来进入正题 1、导入m

SpringBoot中利用EasyExcel+aop实现一个通用Excel导出功能

一、结果展示 主要功能:可以根据前端传递的参数,导出指定列、指定行 1.1 案例一 前端页面 传递参数 {"excelName": "导出用户信息1725738666946","sheetName": "导出用户信息","fieldList": [{"fieldName": "userId","fieldDesc": "用户id"},{"fieldName": "age","fieldDe

Spring6详细学习笔记(IOC+AOP)

一、Spring系统架构介绍 1.1、定义 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。Spring官网 Spring是一款主流的Java EE 轻量级开源框架,目的是用于简化Java企业级引用的开发难度和开发周期。从简单性、可测试性和松耦合度的角度而言,任何Java应用都可以从Spring中受益。Spring框架提供自己提供功能外,还提供整合其他技术和框架

AOP之执行前通知@Before

Spring AOP之执行前通知@Before 此文章说一下执行前通知,即注解@Before。 作用 多用于日志记录、权限校验、初始化资源等。 触发时间 目标函数执行触发。 定义 public class AopBeforeAspect {@Before("execution(public * com.example.demo.service.impl.AccountServiceI

Spring之AOP面向切面编程实现(一)

实现方式:基于配置XML和基于注解实现。 场景:一个手机进货系统,一旦要进货(或出货),要提前记录进货时间,进货完毕后,还要提醒其它人进行验货。 分析:3步走,1,操作进货(或出货)的方法的时候,先记录当前的时间,完毕后,提醒其他人验货。为了不使代码变得冗余,采用aop的策略实现。 基于配置实现 进货出货的接口: IPhoneService.java public i

关于spring 类内部方法调用aop不生效原因,以及jdk,cglib 动态代理原理

目录 引入:spring的aop 深入实验(发现类内部方法调用的代理可以生效) 自己实现动态代理(cglib) spring的动态代理实现 自己实现spring aop的效果 关于上述自己实现aop与spring aop的区别 自己实现的aop:  spring 实现的aop: 模仿spring aop的效果, 代码示例: spring 什么时候为类创建代理 spring b

Spring(四):AOP

一、AOP的概念理解             OOP(面向对象编程)使用的是从上到下、纵向的体系结构来解决重复代码的问题,重点关注的是与实际业务联合紧密的模块。而AOP(面向切面编程)则使用的是横向的体系来解决重复代码的问题,它重点关注的是与业务无关,却为业务模块所共同调用(叫做切面Aspect)的逻辑,如执行业务模块的某一功能时,需要记录操作日志、要实现事务,保证业务操作的原子性等等。AOP将

配置aop报错: Pointcut is not well-formed: expecting 'name pattern' at character position

切入点表达式的使用规则: execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?) 有“?”号的部分表示可省略的,modifers-pattern表示修饰符如public、protected等,ret-type-patter

Android 热更新——非侵入AOP框架

Android 客户端应用上线以后,一旦出现Bug,一般的解决思路是发修复包升级应用,这种方式不仅耗时,更重要的是用户需要频繁的升级版本,体验不好,所以优化的思路是在不发版本的情况下热更新,以期提高用户体验。 近期新出一种非侵入运行期AOP框架Dexposed, 下面简单了解一下这个框架 简要说明: 该框架基于AOP思想,支持经典的AOP使用场景,可应用于日志记录,性能统计,安全控制,事

Spring核心功能——AOP(面向切面编程)

目录 AOP 1 介绍 2 AOP术语 3 应用场景 4 演示   AOP 1 介绍 Spring中另外一个核心功能,AOP AOP(Aspect Oriented Programming),即面向切面编程. OOP(Object Oriented Programming ),即面向对象编程. AOP面向切面编程,利用 一种称为"横切"的技术,剖开封装的对象内部,并将