概述
自动配置类PersistenceExceptionTranslationAutoConfiguration的主要目的是启动Spring框架提供的持久化层异常向Spring标准异常的转换机制。
对该机制的启动PersistenceExceptionTranslationAutoConfiguration是通过向容器注册一个PersistenceExceptionTranslationPostProcessor来完成的。PersistenceExceptionTranslationAutoConfiguration向容器注册该组件的条件是:
- 此组件
bean尚未注册; - 配置选项
spring.dao.exceptiontranslation.enabled未被明确设置为false;
而PersistenceExceptionTranslationPostProcessor是一个BeanPostProcessor。它将每个Repository组件bean包装成一个代理对象并为该代理对象添加一个PersistenceExceptionTranslationAdvisor。该PersistenceExceptionTranslationAdvisor会拦截Repository组件bean的方法调用产生的异常并将其转换成Spring框架标准异常。
源代码
源代码版本 : spring-boot-autoconfigure-2.1.3.RELEASE
package org.springframework.boot.autoconfigure.dao;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
@Configuration
// 仅在类 PersistenceExceptionTranslationPostProcessor 存在于 classpath 上才生效
// PersistenceExceptionTranslationPostProcessor 由包 spring-tx 提供
@ConditionalOnClass(PersistenceExceptionTranslationPostProcessor.class)
public class PersistenceExceptionTranslationAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "spring.dao.exceptiontranslation", name = "enabled",
matchIfMissing = true)
public static PersistenceExceptionTranslationPostProcessor
persistenceExceptionTranslationPostProcessor(Environment environment) {
PersistenceExceptionTranslationPostProcessor postProcessor =
new PersistenceExceptionTranslationPostProcessor();
boolean proxyTargetClass = environment.getProperty(
"spring.aop.proxy-target-class", Boolean.class, Boolean.TRUE);
postProcessor.setProxyTargetClass(proxyTargetClass);
return postProcessor;
}
}

博客介绍自动配置类主要目的是启动框架持久化层异常向标准异常的转换机制。通过向容器注册组件完成启动,注册有条件限制。该组件将每个组件包装成代理对象并添加拦截器,拦截异常并转换为标准异常,还给出了源代码版本和参考文章。
1644

被折叠的 条评论
为什么被折叠?



