spring
文章平均质量分 80
SubaYasin
这个作者很懒,什么都没留下…
展开
-
Spring JDBC 源码解析 —— save / update 的实现
基本思路分析Spring JDBC 对数据库的操作大部分都通过 jdbcTemplete 实现,这也是我们分析 Spring JDBC 的切入点。一个简单的 update 函数的调用例程如下:public void save(User user) { jdbcTemplate.update("insert into user(name, age, sex) values(?, ?, ?)", new Object[] {user.getName(), user.getAge(), user.ge原创 2021-01-23 20:21:25 · 806 阅读 · 0 评论 -
Sping AOP 源码解析(二、创建 AOP 代理——创建代理)
之前说明了创建 AOP 代理的第一步:获取增强器,下面我们要基于获取的增强器创建对应的代理。创建代理在获取了增强器之后,就可以创建代理了。protected Object createProxy(Class<?> beanClass, @Nullable String beanName, @Nullable Object[] specificInterceptors, TargetSource targetSource) { if (this.beanFactory ins原创 2021-01-06 23:42:52 · 143 阅读 · 0 评论 -
Sping AOP 源码解析(二、创建 AOP 代理——获取增强器)
基本思路分析AspectJAwareAdvisorAutoProxyCreator 实现了 BeanPostProcessor 接口,可以在其父类 AbstractAutoProxyCreator 中找到 postProcessAfterInitialization 方法。public Object postProcessAfterInitialization(@Nullable Object bean, String beanName) { if (bean != null) { // 根据给点原创 2021-01-05 18:57:53 · 282 阅读 · 0 评论 -
Sping AOP 源码解析(一、动态 AOP 自定义标签 aop:aspectj-autoproxy)
XML 中 AOP 标签的使用<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLoc原创 2020-12-29 22:05:29 · 298 阅读 · 0 评论 -
ApplicationContext —— 功能扩展的容器加载(一、ApplicationContext 概述)
在 Spring 中,有两种方式加载配置文件:1、使用 BeanFactory 方式加载 XML;2、使用 ApplicationContext 加载 XML。第一种方式已经在之前的文章分析了,并深入了解了其内部机制。现在我们聊聊第二种方式,也是我们最为常用的一种方式 —— ApplicationContext。下面是 ApplicationContext 的启动部分。public ClassPathXmlApplicationContext(String configLocation) throws B原创 2020-12-23 20:48:45 · 159 阅读 · 0 评论 -
Spring容器 —— 深入 bean 的加载(五、初始化 bean)
上篇分析了 bean 中属性注入的方式,在注入了属性之后,就需要初始化 bean 了,这部分工作完成了 bean 配置中 init-methos 属性指定方法的内容,由 initializeBean 函数完成。初始化流程protected Object initializeBean(String beanName, Object bean, @Nullable RootBeanDefinition mbd) { if (System.getSecurityManager() != null) {原创 2020-12-17 22:53:41 · 219 阅读 · 0 评论 -
Spring容器 —— 深入 bean 的加载(四、属性注入)
在完成 bean 的初始实例化之后,我们获得了一个空的 bean 或者说是 bean 的 reference。这种分离式创建也是为了解决循环依赖。现在我们就看看接下来的属性注入部分。源码分析属性注入是由 populateBean 函数完成的。protected void populateBean(String beanName, RootBeanDefinition mbd, @Nullable BeanWrapper bw) { if (bw == null) { if (mbd.hasPro原创 2020-12-17 22:17:20 · 175 阅读 · 0 评论 -
Spring容器 —— 深入 bean 的加载(三、创建 bean 实例 —— createBeanInstance)
之前分析了 bean 创建的基本思路,现在我们看看第一步,如何获取一个初步的 bean 框架 BeanWrapper。createBeanInstance 源码概述protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) { // 解析 class // Make sure bean class is actually resolved at原创 2020-11-28 22:36:11 · 233 阅读 · 0 评论 -
Spring容器 —— 深入 bean 的加载(二、bean 创建基本思路分析)
本文解析了 Spring 的通常创建方法,即 doCreateBean()。原创 2020-11-28 17:46:14 · 158 阅读 · 0 评论 -
Spring容器 —— 深入 bean 的加载(一、加载前的准备工作)
之前谈了有关[bean 加载的大致过程](bean 的加载过程概述)。现在要仔细研究一下其中使用到的各个部分的内部原理。FactoryBean通常来说,Spring 通过反射机制利用 bean 的 class 属性实现类的加载实例化 bean。但在某些情况下,bean 的实例化比较复杂,需要更为灵活的配置方式,通过自定义编码会更好一些,FactoryBean 就是这样一个工厂类接口,用户可以通过实现 org.springframework.beans.factory.FactoryBean 接口定制实例原创 2020-11-17 18:53:06 · 602 阅读 · 0 评论 -
Spring 容器 —— bean 的加载过程概述
源码protected <T> T doGetBean( String name, @Nullable Class<T> requiredType, @Nullable Object[] args, boolean typeCheckOnly) throws BeansException { // 1、转换对应的 beanName String beanName = transformedBeanName(name); Object bean; //原创 2020-11-15 22:37:35 · 459 阅读 · 0 评论 -
Spring容器基础 —— bean xml 配置文件标签的解析和注册
解析 Bean 标签的基本步骤protected void processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate) { // step 1 BeanDefinitionHolder bdHolder = delegate.parseBeanDefinitionElement(ele); if (bdHolder != null) { // step 2 bdHolder = delegate原创 2020-11-11 18:19:57 · 353 阅读 · 0 评论