spring
文章平均质量分 77
yaoshengting
这个作者很懒,什么都没留下…
展开
-
Spring AOP事务实现原理之TransactionSynchronizationManager,ConnectionHolder和DataSource
DataSourceTransactionObject在Spring AOP事务实现原理之事务管理器TransactionManager中有其源码,该类是DataSourceTransactionManager的静态内部类在DataSourceTransactionManager#doGetTransaction()方法中,会通过TransactionSynchronizationManager.getResource(obtainDataSource())方法获取到一个ConnectionHolder原创 2022-03-18 19:07:58 · 1527 阅读 · 0 评论 -
Spring AOP事务实现原理之事务管理器TransactionManager
TransactionManagerpublic interface TransactionManager {}PlatformTransactionManager这是 Spring 事务基础类中的中心接口。对于实现者,建议从提供的 {@link org.springframework.transaction.support.AbstractPlatformTransactionManager} 类派生,该类实现了事务的传播行为并负责事务同步处理。该类使用了模板模式,子类必须为底层事务的特定状态实原创 2022-03-16 23:41:17 · 3332 阅读 · 0 评论 -
Spring AOP事务实现原理之事务拦截器TransactionInterceptor
学习这篇博文需要首先明白Spring AOP的实现原理,可以参考Spring的BeanPostProcessor扩展点实现类AbstractAutoProxyCreator和Spring AOP创建代理类之JdkDynamicAopProxy这两篇博文。TransactionInterceptor该类是Advice实现类,用于对事务性的方法进行拦截,使用通用 Spring的事务基础类(PlatformTransactionManager/ReactiveTransactionManager)进行声明式原创 2022-03-16 23:32:35 · 4961 阅读 · 0 评论 -
Spring AOP事务实现原理之事务属性源AnnotationTransactionAttributeSource
AnnotationTransactionAttributeSource该类读取Spring的 {@link Transactional} 注解并将相应的事务属性TransactionAttribute暴露给 Spring 的事务管理器,如PlatformTransactionManager,ReactiveTransactionManager。还支持 JTA 1.2 的 {@link javax.transaction.Transactional} 和 EJB3 的 {@link javax.ejb.原创 2022-03-16 23:29:44 · 662 阅读 · 0 评论 -
Spring AOP事务实现原理之BeanFactoryTransactionAttributeSourceAdvisor
学习这篇博文需要首先明白Spring AOP的实现原理,可以参考Spring的BeanPostProcessor扩展点实现类AbstractAutoProxyCreator和Spring AOP创建代理类之JdkDynamicAopProxy这两篇博文。BeanFactoryTransactionAttributeSourceAdvisor由 {@link TransactionAttributeSource} 驱动的advisor,用于为事务性方法包含一个事务advice bean。public c原创 2022-03-16 23:26:24 · 1066 阅读 · 0 评论 -
Spring AOP事务实现原理之启用事务EnableTransactionManagement
学习这篇博文需要首先明白Spring AOP的实现原理,可以参考Spring的BeanPostProcessor扩展点实现类AbstractAutoProxyCreator和Spring AOP创建代理类之JdkDynamicAopProxy这两篇博文。EnableTransactionManagement启用 Spring 的注解驱动事务管理能力,和<tx:annotation-driven />是一样的。@EnableTransactionManagement和<tx:annot原创 2022-03-16 23:17:26 · 1068 阅读 · 0 评论 -
Spring FactoryBean
FactoryBeanpublic interface FactoryBean<T> { T getObject() throws Exception; Class<?> getObjectType(); boolean isSingleton();}应用场景FactoryBean 通常是用来创建比较复杂的bean,一般的bean 直接用xml配置即可,但如果一个bean的创建过程中涉及到很多其他的bean 和复杂的逻辑,用xml配置比较困难,这时可转载 2022-03-09 09:25:21 · 90 阅读 · 0 评论 -
Spring AOP创建代理类之JdkDynamicAopProxy
关于Spring如何获取advisor增强器集合的过程,可以看Spring的BeanPostProcessor扩展点实现类AbstractAutoProxyCreator,该文也是接着AbstractAutoProxyCreator继续解析的。前者是获取到advisor集合,该文是拿到这些advisor增强器创建代理对象,并设置advisor拦截器,以及在调用被代理的方法时,如何通过advisor拦截器进行增强。AopProxy用来实际生成代理对象的接口,通过AopProxyFactory接口暴露出来原创 2022-03-01 18:02:19 · 501 阅读 · 0 评论 -
Spring自定义标签和spring.handlers的加载过程
schema配置Spring自定义标签Spring自定义标签的原理XML通常通过DTD、XSD定义,但DTD的表达能力较弱,XSD定义则能力比较强,能够定义类型,出现次数等。自定义标签需要XSD支持,在实现时使用Namespace扩展来支持自定义标签。Spring通过XML解析程序将其解析为DOM树,通过NamespaceHandler指定对应的Namespace的BeanDefinitionParser将其转换成BeanDefinition。再通过Spring自身的功能对BeanDef转载 2022-02-15 13:16:07 · 280 阅读 · 0 评论 -
Spring的BeanFactoryPostProcessor扩展点实现类ConfigurationClassPostProcessor
BeanDefinitionRegistryPostProcessor对标准 {@link BeanFactoryPostProcessor} SPI 的扩展,允许在常规 BeanFactoryPostProcessor 检测开始之前进一步地注册bean定义。特别是BeanDefinitionRegistryPostProcessor 可以进一步地注册bean 定义,这些定义反过来定义 BeanFactoryPostProcessor 实例。public interface BeanDefinition原创 2022-02-11 18:00:06 · 629 阅读 · 0 评论 -
Spring中BeanDefinition的合并getMergedLocalBeanDefinition
在ApplicationContext的refresh方法中,finishBeanFactoryInitialization(beanFactory)这一步是初始化剩余的非懒加载的单例bean,之后会调用BeanFactory的preInstantiateSingletons()方法进行这些bean的加载工作。在preInstantiateSingletons方法中,首先会从beanDefinitionNames集合中获取所有的beanName,之后会循环进行getBean。但是在getBean之前,会原创 2022-01-27 16:14:23 · 1802 阅读 · 0 评论 -
Spring的BeanPostProcessor扩展点实现类AbstractAutoProxyCreator
AbstractAutoProxyCreatorSmartInstantiationAwareBeanPostProcessor接口继承自InstantiationAwareBeanPostProcessor接口。因此AbstractAutoProxyCreator一般是通过InstantiationAwareBeanPostProcessor接口的postProcessBeforeInstantiation方法和postProcessAfterInitialization方法来返回代理对象;pos原创 2022-01-26 16:09:45 · 882 阅读 · 0 评论 -
Spring的BeanPostProcessor扩展点实现类AutowiredAnnotationBeanPostProcessor
实现Spring自动注入依赖的功能,在bean实例化后,进行这重要的初始化操作。public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter implements MergedBeanDefinitionPostProcessor, PriorityOrdered, BeanFactoryAware {}postProcessPropertyValues @De原创 2022-01-26 16:08:38 · 1405 阅读 · 0 评论 -
Spring的BeanPostProcessor扩展点实现类CommonAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessorpostProcessPropertyValues @Deprecated @Override public PropertyValues postProcessPropertyValues( PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) { return postProcessProperties(pvs, be原创 2022-01-26 16:07:18 · 446 阅读 · 0 评论 -
SpringMVC应用启动流程图
原创 2022-01-26 15:09:55 · 348 阅读 · 0 评论 -
Spring上下文刷新refresh过程流程图
下图是自己画的refresh的过程蓝色块:涉及到的class类紫色块:比较重要的节点绿色块:涉及到的spring扩展点原创 2022-01-26 09:40:03 · 472 阅读 · 0 评论 -
Spring的工厂类BeanFactory接口及相关实现类DefaultListableBeanFactory
先通过UML图总体了解下Spring的BeanFactory的结构原创 2022-01-22 23:00:13 · 954 阅读 · 0 评论 -
Spring的BeanPostProcessor扩展点
BeanPostProcessorpostProcessBeforeInitialization /** * 在任何bean初始化回调方法调用之前(如 InitializingBean 的 {@code afterPropertiesSet} 或自定义初始化方法),会执行该方法。 * 此时bean已经被填充了属性值,即执行过了populateBean方法。 * 返回的 bean 实例可能是原始实例的经过包装后的bean。 * 默认实现是按原样返回给定的 {原创 2022-01-22 12:21:45 · 837 阅读 · 0 评论 -
Spring getBean和createBean的过程及三级缓存
DefaultSingletonBeanRegistry三级缓存在该类中,有如下三个属性,是bean的三级缓存/** 一级缓存,保存singletonBean实例的映射: bean name --> bean instance */private final Map<String, Object> singletonObjects = new ConcurrentHashMap(256);/** 二级缓存,保存早期未完全创建的Singleton实例的映射: bean name -原创 2021-09-30 13:50:02 · 396 阅读 · 0 评论 -
AbstractBeanDefinition的initMethodName/destroyMethodName属性及@PostConstruct/@PreDestroy
在AbstractBeanDefinition中有两个属性private String initMethodName; private String destroyMethodName;xml的相关配置他们对应的是xml配置文件中bean标签的如下两个属性:destroy-method它的作用是在销毁bean之前可以执行指定的方法。注意:必须满足scope=“singleton”,并且destroy方法参数个数不能超过1,并且参数类型只能为boolean。init-metho原创 2021-09-27 12:35:00 · 229 阅读 · 0 评论 -
AbstractBeanDefinition的MethodOverrides属性及@LookUp
使用场景及问题在Spring的诸多应用场景中bean都是单例形式,当一个单例bean需要和一个原型bean组合使用或者一个原型bean和另一个原型bean组合使用时,我们通常都是将依赖以属性的方式放到bean中来引用,然后以@Autowired来标记需要注入的属性。但是这种方式在bean的生命周期不一样的时候将会出现问题,假设单例bean A需要一个原型bean B,我们在A中注入bean B,每次调用bean A中的方法时都会用到bean B,Spring Ioc容器只在容器初始化时执行一次,也就是b原创 2021-09-26 18:09:10 · 321 阅读 · 0 评论 -
AbstractBeanDefinition的autowireMode自动装配模式属性
在AbstractBeanDefinition中有一个属性是autowireMode,该属性表示自动装配模式在Spring中,注入方式有两种通过set方法通过构造函数(如果有多个构造函数会选择参数多的构造方法)手动装配注入:@Resource: 默认是通过name来查找注入值,如果不存在就报错@Autowired 通过类型查找(类型),然后再通过nameAutowireMode(自动装配模型):在spring中有四种模式分别是:AUTOWIRE_NO = 0:默认装配模式原创 2021-09-26 14:22:06 · 1029 阅读 · 0 评论 -
BeanDefinition接口关系图及相关实现类
BeanDefinition关系图BeanDefinitionBeanDefinition接口用于描述一个bean实例的属性及构造参数等元数据;主要提供了父beanname,bean类名,作用域,懒加载, bean依赖,自动注入候选bean,等熟悉的设置与获取操作。同时提供了判断bean是否为单例、原型模式、抽象bean的操作,及获取bean的描述,资源描述,属性源,构造参数,原始bean定义等操作。public interface BeanDefinition extends AttributeA原创 2021-09-24 15:34:09 · 243 阅读 · 0 评论 -
Spring的post processor工具类PostProcessorRegistrationDelegate
PostProcessorRegistrationDelegatePostProcessorRegistrationDelegate是AbstractApplicationContext委托执行post processors任务的工具类。这里的postProcessor包括两类 :BeanFactoryPostProcessorBeanPostProcessorBeanFactoryPostProcessor又细分为两类:BeanDefinitionRegistryPostProc原创 2021-09-17 13:43:53 · 542 阅读 · 0 评论 -
SpringBoot环境Environment
Environment关系图AbstractEnvironmentpublic abstract class AbstractEnvironment implements ConfigurableEnvironment { public static final String IGNORE_GETENV_PROPERTY_NAME = "spring.getenv.ignore"; //profiles激活文件 public static final String ACTIVE原创 2021-09-16 12:31:39 · 967 阅读 · 0 评论 -
SpringBoot属性解析器PropertyResolver
PropertyResolverPropertyResolver属性解决器,主要具有两个功能:通过propertyName属性名获取与之对应的propertValue属性值(getProperty)把${propertyName:defaultValue}格式的属性占位符,替换为实际的值(resolvePlaceholders)注意:getProperty获取的属性值,全都是调用resolvePlaceholders进行占位符替换后的值。public interface PropertyRes原创 2021-09-16 12:30:05 · 654 阅读 · 0 评论 -
SpringBoot属性源PropertySource
PropertySourcePropertySource主要是对属性源的抽象,包含属性源名称和属性源内容对象。其方法主要是对这两个字段进行操作。public abstract class PropertySource<T> { //属性源名称 protected final String name; //属性源 protected final T source; // 构造器 public PropertySource(String原创 2021-09-15 18:23:54 · 1365 阅读 · 0 评论 -
Spring源码之AntPathMatcher
Spring源码之AntPathMatcher,这个工具类匹配很强大,采用的是ant匹配规则。什么是ant匹配规则?字符wildcard 描述 ? 匹配一个字符(matches one character) * 匹配0个及以上字符(matches zero or more characters ) ** 匹配0个及以上目录directories(matches zero or more ‘directories’ in a path ) 这个匹配规则很简单,采原创 2021-04-02 09:24:19 · 244 阅读 · 0 评论 -
Spring实战——远程服务同步调用技术RMI、Hessian、Burlap、HttpInvoker、WebService
有多种可以使用的远程调用技术,包括:远程方法调用(Remote Method Invocation,RMI) Caucho的Hessian和Burlap Spring基于HTTP的远程服务 使用JAX-RPC和JAX-WS的Web Service注:关于JAX-RPC和JAX-WS的历史,可以参考...原创 2021-01-22 15:45:10 · 250 阅读 · 0 评论 -
Spring常用的Util工具类
内置的resouce类型UrlResource工具类 描述 UrlResource 通过java.net.URL来访问资源,当然它也支持File格式 ClassPathResource 加载资源文件 new ClassPathResource(“resource/ApplicationContext.xml”); FileSystemResource 通过 FileSystemResource 以文件系统绝对路径的方式进行访问 ServletContextRe转载 2020-12-31 18:18:29 · 1663 阅读 · 0 评论 -
spring web自动装配技术之servlet3.0新特性
https://my.oschina.net/u/3574106/blog/1819394原创 2020-12-29 16:45:50 · 588 阅读 · 0 评论 -
Spring中SPI的实现
Java SPIservice provider interface JDK内置的中服务发现机制一种动态替换发现的机制工具类:在Java SPI中使用的工具类是ServiceLoader 文件路径:META-INF/services使用方式见另一篇博文JAVA SPI 简介Spring SPI工具类:Spring中使用的类是SpringFactoriesLoader,在org.springframework.core.io.support包中 文件路径:文件路径不同 sp.原创 2020-12-25 13:10:16 · 920 阅读 · 1 评论 -
spring.handlers spring.schema xml xsd在Spring中的使用
Spring中对于Bean的定义文件描述<xsd:element name="bean"> <xsd:complexType> <xsd:complexContent> <xsd:extension base="identifiedType"> <xsd:group ref="beanElements"/> <xsd:a...原创 2020-12-24 14:59:23 · 459 阅读 · 0 评论 -
Spring 的注解方式的事务实现机制
一、事务的实现机制在应用系统调用声明@Transactional 的目标方法时,Spring Framework 默认使用 AOP 代理,在代码运行时生成一个代理对象,根据@Transactional 的属性配置信息,这个代理对象决定该声明@Transactional 的目标方法是否由拦截器 TransactionInterceptor 来使用拦截,在 TransactionInterceptor 拦截时,会在在目标方法开始执行之前创建并加入事务,并执行目标方法的逻辑, 最后根据执行情况是否出现异常,利原创 2020-11-20 20:54:41 · 1003 阅读 · 0 评论 -
Spring的InitializingBean接口
有时候会遇到这样的问题:在我们将一个Bean交给Spring管理的时候,有时候我们的Bean中有某个属性需要注入,但是又不能通过一般的方式注入,什么意思呢?举个栗子:首先我们有个Service,在该Service中有一个属性,但是该属性不支持Spring注入,只能通过Build或者new的方式创建(比如StringBuffer之类的),但是我们想在Spring配置Bean的时候一起将该属性注入进来,这时候该怎么办呢?这时候可以通过实现InitializingBean接口来解决!@Servicepu转载 2020-10-28 20:55:51 · 459 阅读 · 0 评论 -
new出来的线程类中无法使用@Autowired注入Bean
根本原因:@Autowired注入Spring Bean,则当前类必须也是Spring Bean才能注入成功,不能用new xxx()来获得对象,这种方式获得的对象也无法使用@Autowired注解注入Bean。因此,当我们在new一个线程之后,发现线程里使用@Autowired注入的对象都是空的解决方法:1、使用一个类实现ApplicationContextAware接口@...原创 2020-03-21 11:21:38 · 1883 阅读 · 0 评论 -
Spring @Autowired注解使用
@Autowired 自动装载@Autowired注解可以使用的地方很多,比如常见的setter方法,constructors方法,普通方法等,一下逐一罗列并举例说明1. Constructors 中使用@Servicepublic class MovieService { private static final Logger logger = Logger...转载 2019-12-23 09:53:01 · 182 阅读 · 0 评论 -
ApplicationContextAware使用理解
问题背景在我们的web程序中,用spring来管理各个实例(bean), 有时在程序中为了使用已被实例化的bean, 通常会用到这样的代码:ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext-common.xml"); AbcService abcService ...转载 2019-12-22 20:30:07 · 199 阅读 · 0 评论 -
Spring MVC返回json字符串时数据格式化
在运用Spring MVC框架开发时,可以直接在方法上添加注解 @ResponseBody 返回JSON数据,如果javabean的属性中包含Date日期类型的数据,默认的转换格式并不是我们想要的 yyyy-MM-dd 这样的格式,那又如何实现这样的格式转化呢? 其实SpringMVC的JSON转换方法是利用了 Jackson 这个开源的第三方类库,它提供了一些自定义格式的方法。只要转载 2016-04-18 17:36:57 · 3418 阅读 · 0 评论 -
使用Spring MVC统一异常处理实战
http://blog.csdn.net/ufo2910628/article/details/403995391 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。 那么,能不能将所有类型的异常转载 2016-05-20 10:00:31 · 1740 阅读 · 0 评论