开发者社区 > 云原生 > 正文

请问Nacos的Java有没有哪个设计模式是使用到了AOP的思想的?

我一个方法里需要四次磁盘I/O,并且是串联有关联的,第一成功才能执行第二个...,现在需要每次查出来的数据缓存到Redis里面,但我又不想每次都写重复的代码,所以我打算写一个AOP把冗余的代码抽出来,请问Nacos的Java有没有哪个设计模式是使用到了AOP的思想的?

展开
收起
三分钟热度的鱼 2023-05-29 13:36:49 103 0
2 条回答
写回答
取消 提交回答
  • Nacos 的 Java 实现中是使用了 AOP 的思想,具体实现是基于 Spring AOP 实现的。Spring AOP 支持的 AOP 编程模型是基于 AOP 联盟的切面(Aspect)和通知(Advice),可以通过切面和通知来将关注点(如日志记录、性能统计等)与其他对象分离。

    在 Nacos 应用中,使用 AOP 技术实现缓存代码的复用是可行的。一种常用的方式是使用 Spring 的 @Cacheable 注解,在需要缓存数据的方法上加上该注解即可实现数据的缓存。具体实现如下:

    1. 添加依赖

      利用 Spring 提供的缓存框架,需要在 pom.xml 文件中添加以下依赖:

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
      </dependency>
      
    2. 配置 Redis 数据库

      application.propertiesapplication.yml 文件中添加 Redis 数据库相关配置:

      spring.redis.host=127.0.0.1
      spring.redis.port=6379
      spring.redis.password=
      spring.redis.database=0
      
    3. 在需要被缓存的方法上加上@Cacheable注解

      @Service
      public class YourService {
      
         @Autowired
         private RedisTemplate<String, Object> redisTemplate;
      
         @Cacheable(value = "yourCacheName", key = "#param1")
         public Object queryData(String param1) {
             // your code here
             return data;
         }
      }
      

      @Cacheable 注解用于标注该方法需要被缓存,其中 value 属性表示缓存的名称,key 用于指定缓存数据的 key 值是由哪些参数决定的。

    这样,在 AOP 切面的帮助下,程序将自动判断缓存是否存在,如果有缓存,则直接从缓存中取出数据;如果没有缓存,则调用实际的方法获取数据并缓存数据,从而达到了代码复用的目的。

    2023-05-29 13:51:05
    赞同 展开评论 打赏
  • 可以用spring cache。此回答整理自钉群“Nacos社区群4”

    2023-05-29 13:42:24
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载