Spring 源码学习

通过注解的形式注入IOC

  1. 简单的创建一个maven的项目的
  2. 下载指定的spring的核心jar包(https://mvnrepository.com/artifact/org.springframework/spring-context/5.1.5.RELEASE,我在下载的是最新的jar包)
  3. 在maven的pom文件中加入spring坐标,等待文件下载
  4. 通过spring 的配置文件加载bean

a)        创建spring配置文件的xml,我这里叫做spring.xml

b)       创建一个实体类包含名字、年龄等字段

c)        在spring.xml中注入bean的形式,如下

d)       创建一个Test类以及main方法,通过ClassPathXmlApplicationContext加载spring.xml,在通过getBean的方式在配置的bean就可以获得创建的对象,以及输入对象信息

  1. 通过spring注解的形式加载bean

a)        创建springConfig的类

b)       通过@Configuration注解标记这个一个配置文件

c)        声明一个实体对象,并返回这个对象,通过@bean注入spring容器当中,如下

d)       通过         AnnotationConfigApplicationContext an = new AnnotationConfigApplicationContext(SpringConfig.class);加载java文件,在通过getBean输出实体对象信息,如下图

  1. 在注解形式里面,通过@ComponentScan进行注解扫描包结构,@ComponentScan也可以配置一些只引入那些,或者排除那些或者使用@ComponentScans配置多个@ComponentScan,主要是使用@filter进行扫描过滤信息。

a)        includeFilters 只包含

  1. 通过使用typeFilter自定义过滤规则(CUSTOM)

a)        实现typeFilter自定义接口,重新了typeFilter的match方法,match方法包含2个参数(MetadataReader,MetadataReaderFactory)分别的意思是:MetadataReader,读取到当前正在扫描的类的信息;MetadataReaderFactory,可以获取其他的类信息,如下图;

b)

  1. 使用@scope作用域

a)        PROTOTYPE(多实例的),ioc启动并不会调用,而是每次获取的时候调用方法创建对象,多次调用就创建多个对象。

b)       SINGLETON(单实例的),ioc启动,调用方法,创建单实例的对象

c)        写法

i.            注解方式:@Scope

ii.            配置文件:在bean标签添加scope属性

  1. 使用@lazy_bean进行加载

a)        主要针对单实例对象说的,在容器启动时就创建对象。所谓懒加载,就是在容器启动不创建对象,而是在第一次获取的创建对象,以后每次获取就不创建了。

  1. 使用@conditional 按照条件注册实例

a)        @Conditional可以被加在类上或者是方法上

i.            放在类上,不满足则所有的bean都不会加载

ii.            放在方法上,只是针对方法

  1. 使用@import使用

a)        通过导入的方式实现把实例加入springIOC容器中,直接在spring文件的类型上@import(文件。class)就行,也可以多个({文件。Class,。。})。默认注入的bean是文件的全路径.

b)       使用importSelector,返回需要导入的全路径的数据,如下图

c)        使用ImportBeanDefinitionRegistrar 可以自定义注册bean信息,并且指定bean的定义信息。

  1. 使用factoryBean 容器工厂。
  2. 生命周期@bean的初始化和销毁

a)        所谓生命周期就是指的是bean的创建、初始化、销毁的过程。现在是有spring容器管理的,但是我们可以自定义初始化和销毁

i.            初始化和销毁:

  1. 初始化:对象创建完成,并赋值好,调用初始化方法
  2. 销毁:单实例,容器关闭是会销毁;多实例,容器不会管理这个bean,容器不会销毁bean

b)       使用接口initializeBean初始化,使用disposeable销毁

c)        可以使用JSR250,使用PostConstruct,在bean创建时,并且赋值完成,初始化

使用Predestroy进行销毁。(使用在方法上)

d)       使用BeanPostprocessor接口,bean的后置处理器,在bean初始化前后处理一些工作

e)        使用@value赋值

i.            可以使基本数据类型

ii.            可以使用#{20-2}类型

iii.            可以从配置文件(propertites)读取数据${ }形式,使用@propertitySource加载外部配置文件数据

f)         自动装配

i.            就是spring依赖注入,完成对ioc容器中各个组件的进行赋值@AutoWired

是spring定义的。主要是使用AutoWiredAnnotationPostPrecessor类进行自动装配的

ii.            @resouce(JSR250定义的,java 规范),默认是按照属性名称进行装配的

iii.            @Inject(JSR330定义的,java 规范),默认是@AutoWired按照他的格式,只不过@Inject不呢个支持required

g)        自动装配还可以使用构造器、方法上,在spring创建对象时,会自动调用该方法装载上spring的容器当中,对象都是容器当中获取的

h)       自定义组件想要使用spring底层的一些组件(AplicationContext,BeanFaction),就可以使用XXXAware,在创建对象时,底层都是使用后置处理器操作的。如下图

  1. 使用@profile,spring提供了根据当期环境,动态激活和切换一系列的组件 的功能,比如说,在实际开发过程中我们有开发库、测试库以及生产库,使用profile可以自动的切换数据库源,下图:

可以使用命令行得形式激活测试库或者是开发库

  1. 第一种方式可以配置-Dspring.profiles.active=Test或者dev
  2. 第二种方式手动配置运行环境

AOP

a)        AOP:在程序运行中动态的将某一段代码切换到指定位置进行运行编程方式

b)       AOP主要就是运行日志打印,动态代理模式等

c)        日志打印主要包含前置通知、后置通知、返回通知、异常通知以及环绕通知,对应的注解分别的是@before、@after、@afterreturning、@afterException,在这些通知方法都可以声明JoinPoint 类型的参数,获取方法名和方法参数等。

spring【一】 学习的更多相关文章

  1. Spring MVC 学习 -- 创建过程

    Spring MVC 学习 -- 创建过程 Spring MVC我们使用的时候会在web.xml中配置 <servlet> <servlet-name>SpringMVC< ...

  2. 《Spring MVC学习指南》怎么样?答:书名具有很大的欺骗性

    2016年6月21日 最近,因为工作需要,我从网上买了一本<Spring MVC学习指南>,ISBN编号: 978-7-115-38639-7,定价:49.00元.此书是[美]Paul D ...

  3. Spring框架学习一

    Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...

  4. Spring security 学习 (自助者,天助之!)

    自己努力,何必要强颜欢笑的求助别人呢?  手心向下不求人! Spring security学习有进展哦: 哈哈! 1.页面都是动态生产的吧! 2.设置权限:  a:pom.xml配置jar包 b:cr ...

  5. 转-Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable

    转-http://snowolf.iteye.com/blog/1628861/ Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariab ...

  6. 【转】Spring 注解学习手札(超好的springmvc注解教程)

    Spring 注解学习手札(一) 构建简单Web应用 Spring 注解学习手札(二) 控制层梳理 Spring 注解学习手札(三) 表单页面处理 Spring 注解学习手札(四) 持久层浅析 Spr ...

  7. 【转】Spring.NET学习笔记——目录

    目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...

  8. Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable (转)

    最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...

  9. Spring.NET学习

    Spring.NET学习笔记——目录(原)   目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) ...

  10. Spring.net 学习IOC------属性注入

    我们就完成我们的第一个spring.net学习IOC的"hello world!". 1> 我们新建一个C# 的控制台项目名为Spring,然后引入Spring.Core.d ...

随机推荐

  1. 周一01.2 计算机硬件&操作系统

    一.计算机硬件组成 1)控制器:是计算机的指挥系统 2)运算器:数学运算&逻辑运算 3)存储器:存取数据 内存:相当于人的短期记忆(缺点:断电数据会丢失:优点:存取速度快) 外存:相当于一个本 ...

  2. OutOfMemoryError/OOM/内存溢出异常实例分析--虚拟机栈和本地方法栈溢出

    关于虚拟机栈和本地方法栈,在JVM规范中描述了两种异常: 1.如果线程请求的栈深度大于JVM所允许的深度,将抛出StackOverflowError异常: 2.如果虚拟机在扩展栈时无法申请到足够的内存 ...

  3. 探索JS引擎工作原理

    JavaScript 从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习 JS 引擎工作机制之前,我们需要引入几个相关的概念:执行环境栈.全局对象.执行环境.变量对象.活动对象.作用域和作用 ...

  4. MYSQL如何计算两个日期间隔天数

    如何透过MYSQL自带函数计算给定的两个日期的间隔天数   有两个途径可获得   1.利用TO_DAYS函数   select to_days(now()) - to_days('20120512') ...

  5. python爬虫数据解析之BeautifulSoup

    BeautifulSoup是一个可以从HTML或者XML文件中提取数据的python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. BeautfulSoup是python爬虫三 ...

  6. 我们为什么要搞长沙.NET技术社区(4)

    我们为什么要搞长沙.NET技术社区(4) 邹溪源,2019年3月7日 Ps:文中的.NET 包括且不限定于传统.NET Framework技术和.NET Core技术. 1.    楔子 昨天(201 ...

  7. 由一个emoji引发的思考

    由一个emoji引发的思考 从毕业以来,基本就一直在做移动端,但是一直就关于移动端的开发,各种适配问题的解决,在日常搬砖中处理了就过了,也没有把东西都沉淀下来,觉得甚是寒颜.现就一个小bug,让我们来 ...

  8. redis的list类型!!!!

    list类型 list类型是按照插入顺序排序的字符串链表,可在(left)头部和(right)尾部插入值,效率高. list增操作 若插入时,该键不存在,则会创建.若所有元素被移除,该键也会被删除. ...

  9. python:socket网络编程

    Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket, 又称为“套接字”. 模块 import socket 创建套接字 socket.socket( ...

  10. Windows Server 2012 R2安装SqlServer 2016

    1.系统安装 微软操作系统 Windows Server 2012 R2 官方原版镜像 Windows Server 2012 R2 是由微软公司(Microsoft)设计开发的新一代的服务器专属操作 ...