Spring AOP 与 Solon AOP 有什么区别?

Spring 和 Solon 作为容器型框架。都具有 IOC 和 AOP 的能力。其中:

  • Spring AOP 使用表达式确定"切入点",可以是某个注解(有侵入),可以是包名或类名或方法(无侵入)
  • Solon AOP 只使用某个注解确定"切入点"(有侵入)

先看两个示例

1、Spring AOP 示例

Spring AOP 有很多不同的能力构建方式。此处采用更简洁的一种方式:

java 复制代码
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LoggingAspect {
    @Pointcut("execution(* com.example.demo.service.*.*(..))") //也可以是某注解表达式
    public void serviceLayer() {}

    @Around("serviceLayer()")
    public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("test");
        return joinPoint.proceed();
    }
}

应用示例

java 复制代码
package com.example.demo.service;

@Component
public class UserService {
    public String getUserById(Long id) {
        return "user-" + id;
    }

    public void updateUser(String user) {
        System.out.println("update: " + user);
    }
}

2、Solon AOP 示例

Solon AOP 有两种能力构建方式。此处采用更简洁的一种方式:

java 复制代码
import org.noear.solon.annotation.Around;
import org.noear.solon.core.aspect.Invocation;
import org.noear.solon.core.aspect.MethodInterceptor;

@Around(Logging.LoggingInterceptor.class) //为注解,附加包围处理的能力
@Target({ElementType.TYPE,  ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Logging {

    class LoggingInterceptor implements MethodInterceptor {
        @Override
        public Object doIntercept(Invocation i) throws Throwable {
            System.out.println("test");
            return i.invoke();
        }
    }
}

应用示例

java 复制代码
package com.example.demo.service;

@Logging
@Component
public class UserService {
    public String getUserById(Long id) {
        return "user-" + id;
    }

    public void updateUser(String user) {
        System.out.println("update: " + user);
    }
}

3、总结

体验感受 Spring AOP Solon AOP
有侵入体验 通过表达式描述,使用时添加"注解" 定义注解,使用时添加"注解"
无侵入体验 通过表达式描述包名或类名或方法,使用时无感 /
优点 可以完全"无侵入"实现 AOP 附加了什么能力比较透明
缺点 表达式有点难写;(可无限制添加)可能会有些混乱 (不能随意添加)可能会有局限性
相关推荐
Goldn.1 小时前
Java核心技术栈全景解析:从Web开发到AI融合
java· spring boot· 微服务· ai· jvm· maven· hibernate
李慕婉学姐2 小时前
【开题答辩过程】以《基于Android的出租车运行监测系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·后端·vue
m0_740043733 小时前
SpringBoot05-配置文件-热加载/日志框架slf4j/接口文档工具Swagger/Knife4j
java·spring boot·后端·log4j
编织幻境的妖3 小时前
SQL查询连续登录用户方法详解
java·数据库·sql
未若君雅裁3 小时前
JVM面试篇总结
java·jvm·面试
kk哥88993 小时前
C++ 对象 核心介绍
java·jvm·c++
招风的黑耳4 小时前
我用SpringBoot撸了一个智慧水务监控平台
java·spring boot·后端
xunyan62344 小时前
面向对象(下)-接口的理解
java·开发语言
大佐不会说日语~4 小时前
Spring AI Alibaba 的 ChatClient 工具注册与 Function Calling 实践
人工智能·spring boot·python·spring·封装·spring ai
程序员游老板4 小时前
基于SpringBoot3+vue3的爱心陪诊平台
java·spring boot·毕业设计·软件工程·课程设计·信息与通信