千家信息网

Springboot怎样使用Aspectj实现AOP面向切面编程

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,Springboot怎样使用Aspectj实现AOP面向切面编程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。要在 Springboot
千家信息网最后更新 2026年11月03日Springboot怎样使用Aspectj实现AOP面向切面编程

Springboot怎样使用Aspectj实现AOP面向切面编程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

要在 Springboot中声明 AspectJ 切面

需在 IOC 容器中将切面声明为 Bean 实例 即加入@Component 注解;当在 Spring IOC 容器中初始化 AspectJ 切面之后, Spring IOC 容器就会为那些与 AspectJ 切面相匹配的 Bean 创建代理.

在 AspectJ 注解中, 切面只是一个带有 @Aspect 注解的 Java 类.

引入jar包

网上都是说springboot使用Aspectj做面向切面编程的时候,只需要引入下面jar包依赖即可

    org.springframework.boot    spring-boot-starter-aop

但是我去编写的时候,单单引入 spring-boot-starter-aop 的jar依赖的时候,像@Component、@Aspect等這些註解都不能使用,後來發現缺少aspectjweaver 这么个jar包,最后引入了下面的jar才解決問題

        aspectj    aspectjweaver    1.5.3    

网上也有说要在application.properties中添加

spring.aop.auto=true这个配置,才能开启Aspectj注解的扫面,但是我去查询了springboot全局配置文件,里面默认配置为true(spring.aop.auto=true # Add @EnableAspectJAutoProxy),所以我没有去做添加,功能没有问题,切面能正常实现。

最后补充一点小知识

AspectJ 支持 5 种类型的通知注解

1)@Before: 前置通知:在方法执行之前执行的通知

2)@After: 后置通知, 在方法执行之后执行 , 即方法返回结果或者抛出异常的时候, 下面的后置通知记录了方法的终止.

3)@AfterRunning: 返回通知, 在方法返回结果之后执行

ps:无论方法是正常返回还是抛出异常, 后置通知都会执行. 如果只想在方法返回的时候记录日志, 应使用返回通知代替后置通知.

4)@AfterThrowing: 异常通知, 在方法抛出异常之后

5) @Around: 环绕通知, 围绕着方法执行(即方法前后都有执行)

环绕通知是所有通知类型中功能最为强大的, 能够全面地控制连接点. 甚至可以控制是否执行连接点.

下面是我写的一些通知的实例

大家可以参考一下

        /*        标识这个方法是个前置通知,  切点表达式表示执行任意类的任意方法.        第一个 * 代表匹配任意修饰符及任意返回值,         第二个 * 代表任意类的对象,        第三个 * 代表任意方法,        参数列表中的 ..  匹配任意数量的参数     */     //@Before:  前置通知    @Before("execution (* com.lc.project..controller..*.*(..))")    public void beforeMethod(JoinPoint joinPoint){        String methodName = joinPoint.getSignature().toString();        Object result= Arrays.asList(joinPoint.getArgs());            System.out.println("The method name:"+methodName+"--value:"+result);    }     //@After: 后置通知    @After("execution (* *.*(..))")    public void afterMethod(JoinPoint joinPoint){                String methodName = joinPoint.getSignature().getName();                System.out.println("The method name:"+methodName+ " ends");    }    //@AfterRunning: 返回通知    @AfterReturning(value="execution (* *.*(..))",returning="result")    public void afterReturningMethod(JoinPoint joinPoint,Object result){                String methodName = joinPoint.getSignature().getName();                System.out.println("The method name:"+methodName+ " ends and result="+result);    }    //@AfterThrowing: 异常通知    @AfterThrowing(value="execution (* *.*(..))",throwing="e")    public void afterReturningMethod(JoinPoint joinPoint,Exception e){                String methodName = joinPoint.getSignature().getName();                System.out.println("The method name:"+methodName+ " ends and result="+e);    }

看完上述内容,你们掌握Springboot怎样使用Aspectj实现AOP面向切面编程的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

方法 切面 时候 注解 编程 代表 容器 问题 配置 内容 功能 参数 实例 更多 类型 结果 连接点 面的 控制 强大 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 科技赋能下的互联网金融 与互联网科技公司 深圳科技互联网 互联网科技公司怎么样 善班互联网科技 米客互联网科技 广西拼得多互联网科技有限公司 深圳国际航运科技和互联网 小米互联网科技园设置 辽宁互联网新科技 互联网公司黑科技创始人 特约风豹互联网科技为什么扣费 互联网营销推广黑科技 广州互联网高科技取餐柜 云鲸互联网络科技有限公司 玉溪新华互联网科技怎么选 绵阳真晨互联网科技有限公司 重庆科技产业互联网有哪些 中国主要互联网科技公司 港股科技和互联网 荆州市昕露互联网络科技有限公司 互联网科技人工智能实验室 浙南科技城互联网大厦建设工程 内蒙古九一互联网科技 互联网科技创新的路径 互联网科技资金流入 宇信科技在杭州互联网排第几 扫呗互联网科技有限公司 中国互联网公司的科技投入
0