`
freeroy
  • 浏览: 74649 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring AOP 拦截失效

阅读更多

最近做个人产品,

由于新模块其中一个新数据表需要关联到旧模块的一个数据表,存在主从关系,导致新旧模块进行相关操作(删除)时,需要维系完整性。

考虑到不想污染旧模块(不想旧模块感知新模块的存在),因此这里在新模块中,利用AOP拦截旧模块DAO的删除方法,使当旧模块的数据删除之前,能够先进行新模块的完整性关系删除。

 

但问题出来了,AOP拦截没办法拦截到对应的DAO方法。一开始以为是配置出错,但又没见报错。于是把DAO的拦截提升一个层次为Service的拦截,奇迹般的跑起来了,难到AOP还会鄙视DAO。

 

后来发现,原来一切的问题都在于集成,由于旧某块的DAO对应的方法(delete(Integer id))是集成与别的类,同时接口也是集成于一个公共的DAO接口,Spring进行AOP拦截的时候,如果使用代理的话,没进行父类API的检查,所以不能拦截父类继承过来的方法。硬是要如此实现的话,就只能修改SPRING的配置,使其强制使用CGLIB编译而不用代理方式。

 

由于情况比较特别,又未能发现相关解决办法,这里就贡献一下!

分享到:
评论

相关推荐

    springMVC AOP拦截拦截Controller等实现日志管理

    在Spring MVC中,AOP(面向切面编程)是一种强大的工具,可以让我们在不修改代码的情况下,对程序的特定部分进行增强,例如日志记录、事务管理或性能监控。在这个场景中,我们将讨论如何利用AOP来实现Controller的...

    使用spring aop对web 应用数据进行memcached缓存

    标题 "使用Spring AOP对Web应用数据进行Memcached缓存" 涉及到的关键技术是Spring AOP(面向切面编程)和Memcached,这是一种常见的高性能、分布式内存对象缓存系统。在Web应用程序中,使用缓存可以显著提高数据访问...

    线程池中使用spring aop事务增强

    Spring AOP通常通过动态代理(JDK动态代理或CGLIB)来实现,当方法通过代理调用时,会触发AOP拦截器链,从而进行事务管理、日志记录等操作。然而,当`job`方法直接在`doJob`内部被非代理实例调用时,AOP机制不会介入...

    springboot实现多数据源而且加上事务不会使aop切换数据源失效

    本示例主要讲解如何使用Spring Boot结合MyBatis实现多数据源切换,并确保AOP事务管理仍然有效。 首先,我们需要配置多数据源。在Spring Boot中,可以使用`DataSource`接口的实现类,如`HikariCP`或`Druid`,创建两...

    springboot-AOP实现多数据源动态切换(Druid连接池)

    1. **Spring AOP(面向切面编程)**:AOP是Spring框架的核心特性之一,它允许我们定义方法拦截器或切面来跨多个点应用横切关注点。在这里,我们使用AOP来在运行时动态改变数据源。 2. **Druid连接池**:Druid是阿里...

    ehcache-spring

    在这个场景中,Spring AOP结合Ehcache使用,可以实现方法级别的缓存拦截。即开发者可以通过AOP的方式定义拦截器,当特定方法被调用时,自动检查缓存中是否存在该方法的返回值,如果存在,则直接从缓存中返回结果,...

    Spring的事务10种常见失效场景总结.zip

    5. **回调方法中的事务失效**:在Spring AOP中,后置处理器(AfterReturningAdvice)不能感知到事务,因此在这些回调方法中无法进行事务操作。如果需要在回调中处理事务,应考虑使用其他回调机制,如`@AfterThrowing...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1....

    CGLIB和Spring framework1

    JDK动态代理基于接口工作,如果目标对象实现了至少一个接口,Spring会创建该接口的一个代理类,当调用代理对象的方法时,Spring会拦截这些调用并执行相应的AOP逻辑。然而,如果目标对象没有实现任何接口,JDK动态...

    Spring+Struts2+hibernate+Redis整合

    1. **Spring框架**:Spring是企业级Java应用的核心框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,使得代码更加模块化和易于管理。在SSH+Redis的整合中,Spring不仅作为业务层的管理框架,还可以通过其...

    spring 4.* 缺少jar spring-cglib-repack-3.2.5.jar_spring-objenesis-repack-2.6.jar

    - AOP代理无法正常工作,导致事务管理失效或者其他基于AOP的功能无法执行。 - 对于未实现接口的类,Spring可能无法正确地创建代理对象,进而影响到依赖注入和控制反转的正常运行。 解决这个问题的方法是将这两个jar...

    shiro整合spring+springmvcjar包

    - Spring的JAR包:`spring-context`、`spring-beans`、`spring-aop`,用于Spring的依赖注入和AOP支持。 - Spring MVC的JAR包:`spring-webmvc`,提供Web MVC功能。 - 可能还需要`slf4j-api`和相应的日志实现库,...

    什么情况会导致@Transactional事务失效?

    3. **静态方法**:由于静态方法不属于任何实例,Spring AOP无法通过代理方式对它们进行拦截,因此`@Transactional`注解不会对静态方法起作用。 4. **异常处理不当**:`@Transactional`依赖于异常传播来决定事务是否...

    Java-spring框架面试题

    Spring实现的事务本质就是AOP完成,对方法前后进行拦截,在执行方法之前开启事务,在执行完目标方法之后根据执行情况提交或者回滚事务。 事务失效的场景 在项目中,经常会遇到事务失效的场景。例如,如果方法上...

    springtransaction 事务管理

    声明式事务管理依赖于Spring的AOP机制,它可以在不修改业务代码的情况下,通过代理对象拦截方法调用,实现事务的自动控制。AOP允许我们定义“切面”(Aspect),即关注点的模块化,如事务管理就是一个典型的横切...

    一段Spring代码引起的调用绑定总结

    因为动态代理(如JDK的Proxy或CGLIB)通常需要生成子类来实现拦截逻辑,而`final`方法无法被子类覆盖,这可能导致AOP功能失效。 5. **Spring Bean的生命周期**: Spring管理的bean有其特定的生命周期,包括初始化...

    16.spring与springmvc常见面试题.docx

    4.容器提供了 AOP 技术,利用它很容易实现如权限拦截,运行期监控等功能;5.容器提供了众多的辅助类,能加快应用的开发;6.spring 对于主流的应用框架提供了集成支持,如 hibernate,JPA,Struts 等;7.spring 属于...

    spring+struts+hibernate项目debug总结.rar

    同时,Spring的AOP(面向切面编程)功能也可能导致问题,如切面配置错误或通知类型不当,都需要细心排查。 其次,Struts2框架处理HTTP请求和视图展示。它的配置文件struts.xml中定义了Action与结果映射,可能出现的...

    Spring事务不生效.pdf

    Spring事务管理要求被代理的方法必须是public,因为非public方法无法被Spring的代理机制正确地拦截和处理。如示例代码所示,如果一个@Transactional注解的方法被声明为private,Spring在检查方法访问权限时会判定其...

    Spring cache

    1. **工作原理**:Spring Cache 使用 AOP (面向切面编程) 来拦截被注解的方法调用,并根据配置执行缓存操作。具体流程包括确定缓存管理器、生成缓存键、执行缓存命中或未命中的逻辑等。 2. **缓存管理器**:默认...

Global site tag (gtag.js) - Google Analytics