Spring Boot 自动配置 : PersistenceExceptionTranslationAutoConfiguration

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

自动配置类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;
	}

}

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值