关闭spring统一的Dao层异常处理

[INFO 2019-05-06 16:51:36 (CglibAopProxy.java:doValidateClass:262)] Unable to proxy interface-implementing method [public final void org.springframework.dao.support.DaoSupport.afterPropertiesSet() throws java.lang.IllegalArgumentException,org.springframework.beans.factory.BeanInitializationException] because it is marked as final: Consider using interface-based JDK proxies instead!

在spring切换springboot时,项目启动提示这个,虽然不影响项目启动,但是还是想解决下

1.确认问题出在代理dao层时,因为我们的项目继承了SqlSessionDaoSupport,这个东西里面方法时final的,不能用cglib来代理,所以报错。

2.但是我们并没有自己设置代理,所以跟一下源码发现,设置代理的地方在

AbstractAdvisingBeanPostProcessor.postProcessAfterInitialization

而报错的代理其实是

public class PersistenceExceptionTranslationPostProcessor extends AbstractBeanFactoryAwareAdvisingPostProcessor 

那么就很清楚了,这个东西是spring做事务的,会自动给

@Repository

注解的类做代理

所以,可以通过spring.dao.exceptiontranslation.enabled是否开启PersistenceExceptionTranslationPostProcessor,默认为true进行设置。

 

dao模块
    dao模块定义了数据库层的各种异常,其中异常的结构已经在spring-jdbc模块中介绍过了,在这里主要是dao的支持和异常的转译,其数据库支持和转译结构如下所示:
dao 支持
提供了对hibernate、jdbc,cci的支持。我们都想到熟悉,对cci可能有些陌生,下面的章节会讲到。
dao异常转译
  PersistenceExceptionTranslationPostProcessor:自动将标示为@repository的bean的持久化异常进行转译。它增加一个PersistenceExceptionTranslationAdvisor来代理相应的已经存在的aop代理或者实现了目标接口的新产生的代理。它将本地资源异常转换为spring的DataAccessException及其子类上。

  PersistenceExceptionTranslationAdvisor是一个spring aop的异常转译类,它应用到respository层或者dao层。它基于给定的PersistenceExceptionTranslator来将本地持久化异常转换为spring的DataAccessException族。

 PersistenceExceptionTranslationInterceptor:一个aop 方法拦截器(MethodInterceptor).提供基于PersistenceExceptionTranslator的异常转换,它是PersistenceExceptionTranslator的代理,将运行时抛出的异常转换为spring 的DataAccessException族。

  PersistenceExceptionTranslator spring集成其它数据获取技术(如jpa、toplink、jdo、hibernate等)抛出运行时异常的接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值