请选择 进入手机版 | 继续访问电脑版

湖南新梦想

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 308|回复: 0

AspectJ自动代理

[复制链接]

33

主题

33

帖子

190

积分

注册会员

Rank: 2

积分
190
发表于 2022-12-25 21:26:56 | 显示全部楼层 |阅读模式
通过xml配置aop太过繁琐,如果有大量的目标对象都要生成代理对象,那么我们上面的配置要重复配置很多份,
于是aopalliance 中出现了-一种AspectJ技术,具有以下两个特点:
1)通过注解配置切点(哪个方法需要被入侵)和通知(黑客)
2)自动生产代理对象
AspectJ介绍
AspectJ是一个面向切面的框架, 它扩展了Java语言。AspectJ定 义了AOP语法所以它有一个
专门的编译器用来生成遵守Java字节编码规范的Class文件。
AspectJ是一个基 于Java语言的AOP框架
Spring2 0以后新增了对AspectJ切点表达式支持
@AspectJ是AspectJ1 5新增功能,通过JDK5注解技术, 允许直接在Bean类中定义切面
新版本Spring框架,建议使用AspectJ方式来开发AOP


@Component
@Aspect  //通过注解定义切面 == 切点(目标方法) +  通知(黑客)
public class AppAspect {
    //切点  * 任何访问修饰符  .. 任意参数
    //com.xmx.dao.impl.UserDaoImpl.add方法进行增强
    @Pointcut("execution(* com.xmx.dao.impl.UserDaoImpl.add(..))")
    public void pointCutAdd(){

    }
    @Pointcut("execution(* com.xmx.dao..*(..))")
    public void pointPage(){

    }
    //通知
    //前置通知/增强
    @Before("pointCutAdd()")
    public void before(JoinPoint joinPoint){
        System.out.println("鉴权"+ Arrays.toString(joinPoint.getArgs()));
    }

    @Around("pointCutAdd()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable{
        Object[] args=pjp.getArgs();
        args[0]=100;
        args[1]=2;
        Object retVal=pjp.proceed(args);
        System.out.println("方法的返回值为:"+retVal);
        return retVal;
    }
    @After("pointCutAdd()")
    public void after(JoinPoint joinPoint){
        System.out.println("最终通知");

    }
    @AfterReturning(value = "pointCutAdd()",returning = "result")
    public void afterreturning(JoinPoint joinPoint,Object result){
        System.out.println("后置通知执行了...,方法的返回值为:"+result);
    }

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|湖南新梦想 ( 湘ICP备18019834号-2 )

GMT+8, 2023-10-4 14:43 , Processed in 0.048623 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表