`

自定义缓存注解遇到的问题与解决

 
阅读更多

      

         起因:由于系统要集成memcached实现缓存服务,java客户端选用xmemcache,本来想集成spring的缓存注解,@Cacheabale,@CachePut,@Cacheevict,但是由于项目中spring版本不够无法使用上面注解,而且版本又不能升级,为了系统的稳定性。

 

          解决办法:为了不想把缓存的操作,侵入业务代码,于是就模仿自定义上面三个注解,并且支持spring el表达式来动态获取方法参数来封装key,表达式解析用SpelExpressionParser类处理

         

          问题:1:在切面处理中无法拿到目标类的执行方法,因为是是基于jdk 动态代理实现切面拦截,接口里是泛型方法,于是我在切面拿到的是桥接方法,不是真实调用方法,通过看spring 源码发现BridgeMethodResolver 类的findBridgedMethod 可以通过桥接方法获取目标方法。

            2:拿到目标方法后,由于要获取方法参数名称来封装缓存key,但通过反射无法拿到方法的参数名称,继续查看spring 源码 ,发现可以通过LocalVariableTableParameterNameDiscoverer 来处理,原理好像是通过ASM 字节码码增强工具来获取目标方法参数名称。

 

 

分享到:
评论

相关推荐

    自定义redis序列化和解决穿透问题.docx

    然而,在实际应用中,可能会遇到多线程环境下的数据同步延迟问题以及缓存穿透问题,这两个问题都需要妥善解决以保证系统的稳定性和效率。 缓存穿透是指当大量请求同时对缓存中不存在的数据进行查询时,这些请求会...

    Spring AOP如何整合redis(注解方式)实现缓存统一管理详解

    为了解决这个问题,我们可以使用Spring AOP与Redis结合,使用注解的方式来实现缓存统一管理。下面是解决方案的思路: 1. 自定义注解:我们可以自定义一个注解,例如@RedisCache,用于标记需要缓存的数据。 2. ...

    cache设置缓存数据,可直接运行

    8. **缓存穿透、缓存雪崩和缓存击穿**:这些都是在使用缓存时可能遇到的问题。缓存穿透是用户请求的数据在数据库中也不存在,导致所有请求都落到数据库上;缓存雪崩是指大量缓存同一时间失效,请求全部涌向数据库;...

    spring redis 分布式缓存整合详细的注释说明

    五、自定义缓存管理器 如果需要更细粒度的控制,可以创建自定义的`CacheManager`实现,例如使用`RedisCacheManager`,并配置缓存策略、过期时间等。 六、使用示例 在实际项目中,可以创建一个工具类,比如`...

    Hibernate使用JPA注解代码

    如果你在HiberTest项目中遇到类似问题,可以参考上述分析进行调试和解决。同时,建议在开发过程中保持良好的编程习惯,如及时更新依赖、详细阅读官方文档以及在出现问题时积极查找相关社区的解决方案。这样,你不仅...

    SpringBoot缓存管理开源架构源码2021.pdf

    开源项目中往往有较为复杂的实现逻辑和设计模式的应用,从这些实现中学习可以加深对缓存机制及其在实际应用中可能遇到的挑战和解决方案的理解。 总结以上知识点,Spring Boot通过其提供的缓存抽象和集成的注解支持...

    MyBatis自定义映射 级联属性操作.zip

    MyBatis是一款强大的Java持久层框架,它简化了数据库与Java对象之间的交互,通过XML或注解的方式将SQL语句映射为Java方法,从而实现动态SQL和数据访问。在"自定义映射 级联属性操作"这个主题中,我们将深入探讨如何...

    spring 自定义属性编辑器

    - 注解注册:在Java配置类中,使用`@Bean`注解的方法返回一个`PropertyEditorRegistrar`实现,Spring会在初始化时调用其`registerEditors()`方法。 注册完成后,Spring在遇到需要转换的类型时会自动使用我们注册的...

    spingmvc集成shiro实现权限注解

    在本文中,我们将深入探讨如何将Spring MVC与Apache Shiro框架集成,以便通过注解方式实现权限管理。...不过,为了确保系统的安全性,开发者仍需对Shiro的基本原理有深入了解,以便在遇到问题时能快速定位并解决。

    java开发常遇问题和解决

    在Java开发过程中,开发者经常会遇到各种各样的问题,这些问题涵盖了语法错误、运行时异常、性能优化、并发编程、内存管理等多个方面。以下是一些常见的Java开发问题及其解决方案: 1. **内存溢出(Out of Memory)...

    解决springboot实现跨域session共享问题

    在现代Web应用开发中,Spring Boot作为Java领域的一个热门框架,常常被用来构建高效、便捷的服务。然而,随着Web服务的复杂性和交互...如果你在实施这些解决方案时遇到任何问题,可以在评论区留言,我会及时进行解答。

    ehcache模糊批量移除缓存的方法

    但是,@CacheEvict 注解使用的是 key-value 的,不支持模糊删除,这时候就会遇到问题。 例如,在使用 @Cacheable 配合 Spring EL 表达式添加了同一方法的多个缓存时,例如: ```java @GetMapping("/listOfTask/{...

    NoHttp自定义请求深度定制

    开发者只需要定义好对应的JavaBean类,并通过注解指定JSON字段与Java属性的映射关系,NoHttp就能自动进行转换。 3. **自定义拦截器**:NoHttp提供了请求和响应拦截器机制,允许开发者在请求发出前或响应返回后进行...

    mybatis-memcached-1.0.0.zip

    3. **缓存注解和接口**:在MyBatis的映射器接口方法上,可以使用`@CacheNamespace`和`@CacheKey`注解来定义缓存策略。例如,你可以指定一个方法的返回结果应该被缓存多久,或者定义哪些参数应作为缓存键的一部分。 ...

    MyBatis.md

    3. **自定义缓存实现**:如果默认的缓存机制无法满足需求,还可以通过自定义缓存实现来扩展 MyBatis 的缓存功能。这通常涉及到编写实现了 `org.apache.ibatis.cache.Cache` 接口的类。 4. **合理设计应用程序结构**...

    spring boot mybatis 多数据源与缓存.zip

    在Spring Boot应用中,集成MyBatis框架进行数据库操作时,常常会遇到多数据源的需求。这通常是由于系统需要连接不同的数据库,例如一个用于主业务数据,另一个用于日志或统计等辅助数据。本项目正是以此为目标,展示...

    Spring声明式事务和@Aspect的拦截顺序问题的解决

    Spring 声明式事务和 @Aspect 的拦截顺序问题的解决 Spring 框架中,声明式事务和 @Aspect 都可以用于实现Aspect-Oriented Programming(面向方面编程),但是它们的拦截顺序问题往往会导致很多问题。本文将详细...

    Hibernate注解jar

    在实际开发中,我们还会遇到如事务管理、缓存配置、查询语言(HQL)等其他关键概念,但本篇文章主要聚焦于使用注解进行ORM映射的基础知识。了解并熟练掌握这些注解,将极大地提升你使用Hibernate进行数据库操作的...

    MyBatis3.5.15源码阅读注释

    MyBatis 是一款著名的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。...同时,源码阅读也有助于我们在遇到问题时能够快速定位并解决。

    Laravel开发-laravel-middleware-response-cache

    此外,还可以自定义缓存键,以确保不同页面的缓存不会相互影响。 需要注意的是,缓存虽然提高了性能,但可能会影响数据的实时性。因此,在更新或删除内容时,需要正确清除相关的缓存,以确保用户看到的始终是最新的...

Global site tag (gtag.js) - Google Analytics