spring入门及源码学习
军伟@
Java开发工程师
展开
-
Spring源码学习--ClassPathXmlApplicationContext(一)
ApplicationContext应用上下文体系如下:在实现类ClassPathXmlApplicationContext中其实并没有多少重要的操作,主要是在构造函数中配置Spring配置文件的路径:public class DaoOperationMain { public static void main(String[] args) { ApplicationContext原创 2017-03-02 18:55:08 · 9707 阅读 · 0 评论 -
Spring源码学习--Bean对象初始化(二)
即使我们在不了解Spring对bean的初始化机制,我们也可以根据Java语言的特性猜测到其很有可能是通过反射机制来完成Bean的初始化操作,接下来我们一步一步的剖析Spring对Bean的初始化操作。 首先Spring会通过调用 getBean(String name)来获取Bean,在获取bean的过程中完成的Bean的初始化操作。AbstractBeanFactory类中: @Overrid原创 2017-07-03 20:41:58 · 1871 阅读 · 1 评论 -
Spring源码学习--BeanFactory对象实例化工厂(一)
BeanFactory及其子类是Spring IOC容器中最重要的一个类,BeanFactory由类名可以看出其是一个Bean工厂类,其实它确实是一个Bean工厂类,完成Bean的初始化操作。Bean的初始化操作还是一个比较麻烦的操作,首先根据spring注入配置将bean初始化为单例或者原型,其次需要根据Bean的属性配置来完成Bean参数的注入配置,还有要解决单例模式下Bean的循环依赖的问题原创 2017-07-03 18:41:16 · 2181 阅读 · 0 评论 -
Spring源码学习--Bean注入解析结果BeanDefinition
BeanDefinition描述了一个bean实例,拥有属性值、构造参数值和具体实现的其他信息,其是一个bean的元数据,xml中配置的bean元素会被解析成BeanDefinition对象。BeanDefinition的接口的结构类图:ChildBeanDefinition 可以让子Bean定义拥有从父母哪里继承配置的能力。相应的,子Bean定义有一个固定的依赖--他们的父bean定义。 一原创 2017-06-22 18:50:48 · 3572 阅读 · 0 评论 -
Spring源码学习--Spring事物
Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用hibernate进行数据访问时,DataSource实际为SessionFactory,Transacti转载 2017-07-11 16:42:04 · 1631 阅读 · 2 评论 -
Spring源码学习--FactoryBean实现原理
1、概述spring中有两种类型的Bean:一种是普通的JavaBean;另一种就是工厂Bean(FactoryBean),这两种Bean都受Spring的IoC容器管理,但它们之间却有一些区别。2、详述普通的JavaBean不再多说,我们将其定义好,然后在配置文件中定义并配置其依赖关系,就可以通过IoC容器的getBean获取到。那么FactoryBean呢?FactoryBean跟普通Bean原创 2017-06-21 20:34:24 · 3430 阅读 · 1 评论 -
Spring Aop源码学习--JoinPoint连接点
JoinPoint连接点:程序执行过程中明确的点,简单的来说就是Java程序执行过程中的方法。JoinPoint接口图:JoinPoint通过抽象实现成为一个个的Method,在执行每个JoinPoint所代表的Method中,会执行对应的Advice(参考博客Spring Aop源码学习--Advice通知)。JoinPoint接口提供的方法public interface Joinpoint原创 2017-07-10 20:05:17 · 3616 阅读 · 0 评论 -
Spring Aop源码学习--Advice通知
Advice通知,所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类(1)BeforeAdvice、AfterAdvice:SpringAOP自定义的通知,用于拦截的方法之前或者之后,继承了AOP联盟的通知接口Advice。 (2)MethodBeforeAdvice、AfterReturningAdvice:仍然是SpringAOP自己的接口设计 Met原创 2017-07-10 19:30:46 · 1979 阅读 · 1 评论 -
Spring源码学习--Spring配置解析文件ApplicationContext.xml(一)
接下来我们用多篇文件对Spring解析Bean配置文件ApplicationContext.xml的过程进行一系列的了解,了解Spring对我们在ApplicationContext.xml中注入的Bean的解析流程。AbstractApplicationContext:中会初始化Bean容器@Override public void refresh() throws BeansExceptio原创 2017-06-20 19:09:21 · 2896 阅读 · 0 评论 -
Spring源码学习--Bean的生命周期
Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring容器。这里,我们讲的也是 ApplicationContext中Bean的生命周期。而实际上BeanFactory也是差不多的,只不过处理器需要手动注册。一、生命周期流程图: Spring Bean转载 2017-07-13 10:19:50 · 5821 阅读 · 0 评论 -
Spring源码学习--BeanFactoryPostProcessor
和BeanPostProcessor原理一致,Spring提供了对BeanFactory进行操作的处理器BeanFactoryProcessor,简单来说就是获取容器BeanFactory,这样就可以在真正初始化bean之前对bean做一些处理操作。BeanFactoryPostProcessor接口源码:public interface BeanFactoryPostProcessor {原创 2017-06-13 15:01:22 · 2510 阅读 · 0 评论 -
Spring Aop源码学习--PointCut切入点
PointCut切入点简单来说就是用来指明Advice(增强)所作用的地方(一般指方法),PointCut简单来说是一个基于表达式的拦截条件。PointCut接口及实现类:PointCut接口提供了两个接口分别对类和方法进行匹配过滤,如果类及方法匹配成功则Advice就可以作用在方法上。public interface Pointcut { /** * Return the ClassFi原创 2017-07-07 18:29:26 · 5659 阅读 · 0 评论 -
Spring Aop源码学习--Aop代理AopProxy
AopProxy是Spring Aop提供的代理类,简单来说通过其实现类可以获取到代理类。AopProxy接口提供的方法如下:public interface AopProxy { /** * Create a new proxy object. * Uses the AopProxy's default class loader (if necessary for proxy cre原创 2017-07-07 18:22:52 · 1180 阅读 · 0 评论 -
Spring Aop源码学习--Aop代理工厂AopProxyFactory
Spring AOP提供了Aop代理类的工厂类AopProxyFactory,其作用就是创建AopProxy类。//Aop工厂,创建AOPpublic interface AopProxyFactory { //创建AOP AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException;}AopProx原创 2017-07-07 18:16:00 · 1378 阅读 · 0 评论 -
Spring源码解析--Spring配置文件解析BeanDefinitionParserDelegate(四)
上一篇博客Spring源码学习--Spring配置文件解析BeanDefinitionDocumentReader(三)中我们已经了解到对于Spring的配置文件的解析处理操作是在BeanDefinitionParserDelegate中进行处理操作,接下来我们简单介绍一下BeanDefinitionParserDelegate所做的处理操作。 首先BeanDefinitionPars原创 2017-06-27 19:19:07 · 1848 阅读 · 0 评论 -
Spring源码学习--Spring配置文件解析BeanDefinitionDocumentReader(三)
上一篇博客 Spring源码学习--xml配置解析文件BeanDefinitionReader(二)中我们已经了解到BeanDefinitionReader已经将Spring的xml配置文件解析成Document对象了,接下来的解析处理工作是在BeanDefinitionDocumentReader中对Document对象进行解析工作了。BeanDefinitionDocumentReader接口原创 2017-06-21 20:25:39 · 1746 阅读 · 0 评论 -
Spring源码学习--BeanDefinitionHolder
上一篇博客Spring源码学习--Bean注入解析结果BeanDefinition我们已经介绍了BeanDefinition相关的知识,这边博客我们介绍一下BeanDefinitionHolder,简单来说其就是一个BeanDefinition的持有者,其定义了一下变量,并对以下变量提供get和set操作。private final BeanDefinition beanDefinition;原创 2017-06-27 18:42:43 · 5906 阅读 · 0 评论 -
Spring源码学习--Bean对象循环依赖问题解决(四)
循环依赖就是N个类相互嵌套引用,如果通过new对象的方式产生循环依赖的话会导致程序内存溢出报错,接下来我们了解一下spring是如何解决循环依赖问题。第一种:prototype原型bean循环依赖对于原型bean的初始化过程中不论是通过构造器参数循环依赖还是通过setXxx方法产生循环依赖,Spring都会直接报错处理。AbstractBeanFactory.doGetBean()方法:if (i原创 2017-07-05 18:28:17 · 6253 阅读 · 4 评论 -
Spring源码学习--Bean对象变量初始化(三)
在上一篇博客 Spring源码学习--Bean对象初始化(二)中我们介绍了Bean对象的初始化过程,接下来我们介绍一下对初始化后的Bean的变量值初始化的操作流程。 对于Spring对属性值注入的方式,即使我们没有看Spring的实现方式可能也会猜到,对于通过set方法注入的变量值简单来说调用类的xx.xx.setXx(args ..)就完成了变量值的注入操作,对于通过注解@Autow原创 2017-07-04 20:25:31 · 2221 阅读 · 0 评论 -
Spring源码学习--Spring配置文件解析BeanDefinitionReader(二)
Spring配置文件的解析是通过BeanDefinitionReader来实现的,其实了解BeanDefinitionReader实现的机制就会发现,其只是将ApplicationContext.xml配置文件解析成Document对象,真正对xml中元素解析的类是在BeanDefinitionDocumentReader的实现类中来完成的,接下来我们也会对它进行介绍。对ApplicationCo原创 2017-06-20 19:38:10 · 1681 阅读 · 0 评论 -
Spring源码解析--Spring配置文件解析NamespaceHandler(五)
上一篇博客 Spring源码解析--Spring配置文件解析BeanDefinitionParserDelegate(四)中我们介绍了对Bean基本元素的解析处理器,接下来我们介绍一下Spring提供的NamespaceHandler的处理机制,简单来说就是命名空间处理器,Spring为了开放性提供了NamespaceHandler机制,这样我们就可以根据需求自己来处理我们设置的标签元素。Spri原创 2017-06-28 19:45:44 · 7802 阅读 · 0 评论 -
Spring源码学习--AbstractApplicationContext(八)
ApplicationContext体系:AbstractApplicationContext是Spring应用上下文中最重要的一个类,这个抽象类中提供了几乎ApplicationContext的所有操作。主要有容器工厂的处理,事件的发送广播,监听器添加,容器初始化操作refresh方法,然后就是bean的生成获取方法接口等。主要还是提供了一些方法,复杂的操作也是没有太多。我们就不详细分析源码了,原创 2017-03-07 21:13:54 · 5521 阅读 · 0 评论 -
Spring源码学习--AbstractRefreshableConfigApplicationContext(六)
ApplicationContext应用上下文体系如下:AbstractRefreshableConfigApplicationContext是一个抽象类,其中并没有多少具体的操作,具体的操作都在其子类和父类中。源码如下:/** * 也没有太多具体的操作,主要的操作都在子类和父类中 */public abstract class AbstractRefreshableConfigApplic原创 2017-03-06 21:04:39 · 2456 阅读 · 0 评论 -
Spring源码学习--AbstractRefreshableWebApplicationContext(五)
ApplicationContext应用上下文体系如下:AbstractRefreshableWebApplicationContext抽象类中并没有太多的操作,更多的是一些get和set操作,主要包括ServletContext(应用上下文就保存其中)和一些主题Theme相关。完整源码如下:public abstract class AbstractRefreshableWebApplicati原创 2017-03-06 20:39:34 · 1997 阅读 · 0 评论 -
Spring源码学习--ConfigurableWebApplicationContext(九)
ApplicationContext体系:ConfigurableWebApplicationContext是web应用上下文使用的接口,并没有定义太多的操作,主要和Servlet上下文及配置文件等,没有多少接口定义。public interface ConfigurableWebApplicationContext extends WebApplicationContext, Configura原创 2017-03-09 20:58:23 · 3114 阅读 · 0 评论 -
Spring源码分析--AbstractRefreshableApplicationContext(七)
ApplicationContext应用上下文体系:AbstractRefreshableApplicationContext主要是和容器的刷新与创建有关,调用refreshBeanFactory方法完成applicationContext.xml的解析操作,完成容器的初始化操作。//类似于初始化容器,这里的容器就是DefaultListableBeanFactory @Override pr原创 2017-03-08 19:32:30 · 4005 阅读 · 5 评论 -
Spring源码学习--XmlWebApplicationContext(四)
ApplicationContext应用上下文体系如下:XmlWebApplicationContext是用于web容器的应用上下文的,其也没有太多操作,主要还是applicationContext.xml的解析操作,完整源码如下public class XmlWebApplicationContext extends AbstractRefreshableWebApplicationContex原创 2017-03-04 15:27:32 · 3513 阅读 · 0 评论 -
spring源码学习--AbstractXmlApplicationContext(三)
ApplicationContext应用上下文体系如下:之前我们已经介绍了两个子类 Spring源码学习--ClassPathXmlApplicationContext(一)和 spring源码学习--FileSystemXmlApplicationContext(二),接下来我们介绍一下这两个实现类的父类AbstractXmlApplicationContext。在AbstractXmlAppl原创 2017-03-04 15:05:48 · 3963 阅读 · 0 评论 -
spring源码学习--FileSystemXmlApplicationContext(二)
在上一篇博客 Spring源码学习--ClassPathXmlApplicationContext(一)我们简单介绍了ClassPathXmlApplicationContext,接下来我们介绍一下FileSystemXmlApplicationContextApplicationContext应用上下文体系如下:FileSystemXmlApplicationContext的源码如下:/**原创 2017-03-02 18:59:19 · 4044 阅读 · 1 评论 -
Spring源码学习--ConfigurableApplicationContext(十)
ApplicationContext体系:ConfigurableApplicationContext接口中定义了一些基本操作,比如设置上下文ID,设置父应用上下文,添加监听器和刷新容器相关的操作等。源码如下:public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeabl原创 2017-03-13 09:36:25 · 8136 阅读 · 1 评论 -
Spring源码学习--WebApplicationContext(十一)
WebApplicationContext是一个接口,并没有提供比较多的操作,主要有一个函数是getServletContext,用来获取Servlet上下文,因为spring 的IO容器在web中是保存在ServletContext中的。源码如下:public interface WebApplicationContext extends ApplicationContext { Str原创 2017-03-14 20:58:13 · 1490 阅读 · 0 评论 -
Spring源码学习--自定义标签
Spring对配置文件applicationContext.xml中的标签解析都是有一定规则的要求的,Spring作为一个开放的框架其也允许我们定制一些我们需要的标签元素。1、创建解析结果实体类:public class User { private String name; private String email; private int age; //get原创 2017-05-17 11:14:39 · 2176 阅读 · 0 评论 -
Spring源码学习--BeanPostProcessor
BeanPostProcessor接口的作用是在Spring容器完成Bean实例化前后可以添加一些自己的逻辑处理,我们可以定义一个或者多个BeanPostProcessor接口的实现。BeanPostProcessor接口提供了两个方法:1、postProcessBeforeInitialization 可以对Bean在实例化之前添加一些逻辑处理2、postProcessAfterInitial原创 2017-05-16 21:20:04 · 2354 阅读 · 0 评论 -
Spring源码学习--AOP那点事(二)
上一篇博客 Spring源码学习--AOP那点事(一)中我们已经介绍了有些AOP相关的知识,我们从写死代码,到使用代理;从编程式 Spring AOP 到声明式 Spring AOP。一切都朝着简单实用主义的方向在发展。沿着 Spring AOP 的方向,Rod Johnson(老罗)花了不少心思,都是为了让我们使用 Spring 框架时不会感受到麻烦,但事实却并非如此。那么,后来老罗究竟对 Sp转载 2017-05-23 19:36:56 · 1834 阅读 · 0 评论 -
Spring源码学习--AOP那点事(一)
今天我要和大家分享的是 AOP(Aspect-Oriented Programming)这个东西,名字与 OOP 仅差一个字母,其实它是对 OOP 编程方式的一种补充,并非是取而代之。翻译过来就是“面向方面编程”,可我更倾向于翻译为“面向切面编程”。它听起有些的神秘,为什么呢?当你看完这篇文章的时候,就会知道,我们做的很重要的工作就是去写这个“切面” 。那么什么是“切面”呢?没错!就是用一把刀来切转载 2017-05-23 19:35:33 · 2188 阅读 · 0 评论 -
spring的maven配置文件
spring各个包的maven配置文件 org.springframework spring-context 4.2.2.RELEASE org.springframework spring-aop 4.2.2.RELEASE org.springframework spring-aspects 4.2.2.RELEASE org.spring原创 2015-11-06 11:37:37 · 2852 阅读 · 0 评论 -
spring注解关键字
spring注解:(1)@Controller 控制器(2)@Autowired 按照类型匹配,可以完成对类成员变量,方法及构造函数进行标注,完成自动装配的工作 @Autowired(required=false) 在找不到匹配Bean时也不报错(3)@Qualifier 注释指定注入bean的名称,防止冲突,可以对成员变量、方法入参、构造函数入参进行标注(原创 2016-01-07 10:37:21 · 2373 阅读 · 0 评论 -
Spring源码学习--ApplicationContext(十二)
ApplicationContext是所有应用上下文的父接口,其也继承了BeanFactory的相关接口,简单来说也是一个Bean工厂,所以ApplicationContext中可以有一些列的Bean操作。ApplicationContext的源码如下:public interface ApplicationContext extends EnvironmentCapable, ListableB原创 2017-03-14 21:02:35 · 1772 阅读 · 0 评论 -
Spring Aop源码学习--Advisor切面
Advisor接口及其实现类是Advice(通知)和PointCut(切入点)的一个组合体,按照aop的定义其就是一个Aspect切面。Advisor及其实现类:在接口Advisor中定义了获取Advice通知的方法public interface Advisor { //获取通知 Advice getAdvice(); boolean isPerInstance();}在Point原创 2017-07-07 18:30:11 · 1406 阅读 · 0 评论