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. ReactNative之参照具体示例来看RN中的FlexBox布局

    今天是重阳节,祝大家节日快乐,今天继续更新RN相关的博客.上篇博客<ReactNative之从HelloWorld中看环境搭建.组件封装.Props及State>中我们通过一个HelloW ...

  2. Javascript高级编程学习笔记(97)—— WebGL(3) WebGL上下文(1)

    WebGL上下文 在支持WebGL的浏览器中,WebGL的名字为 "experimental-webgl",这是由于 webgl 的规范仍未制定完成 制定完成后名字就会改为简单的 ...

  3. PMBook - 7.项目成本管理

    7.1 规划成本管理 7.1.1 规划成本管理:输入 7.1.1.1 项目章程 7.1.1.2 项目管理计划 7.1.1.3 事业环境因素 7.1.1.4 组织过程资产 7.1.2 规划成本管理:工具 ...

  4. 关闭 Mac 拼写自动纠正与横线转换

    如果你是个程序员, 如果你恰好用 mac 自带的 notes 来做笔记, 很大可能性, 你会在里面贴代码, 但是, Mac 的拼写检查和自动纠正功能,会把代码变成你不想要的样子, 比如, 它会为你首字 ...

  5. SmartSql 动态代理仓储

    SmartSql 动态代理仓储,一个高生产力的组件.该组件看似很难懂,实际上仅做了映射Statement,转发请求的功能.但却意义重大. SmartSql提供了一个通用泛型仓储接口 SmartSql. ...

  6. [翻译] GCC 内联汇编 HOWTO

    目录 GCC 内联汇编 HOWTO 原文链接与说明 1. 简介 1.1 版权许可 1.2 反馈校正 1.3 致谢 2. 概览 3. GCC 汇编语法 4. 基本内联 5. 扩展汇编 5.1 汇编程序模 ...

  7. 如何大幅提升web前端性能之看tengine在大公司架构实践

    在一个项目还是单体架构的时候,所有的js,css,image都会在一个web网站上,看起来并没有什么问题,比如下面这样: 但是当web网站流量起来的时候,这个单体架构必须要进行横向扩展,而在原来的架构 ...

  8. Docker进阶之七:管理应用程序数据

    管理应用程序数据:Volume Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs. volumes:Docker管理宿主机文件系统的一部分( ...

  9. SLAM+语音机器人DIY系列:(三)感知与大脑——6.做一个能走路和对话的机器人

    摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...

  10. 整合 MyPerf4J 做Java性能监控和统计工具

    快速启动MyPerf4J MyPerf4J 采用 JavaAgent 配置方式,透明化接入应用,对应用代码完全没有侵入. 打包 项目地址: https://github.com/LinShunKang ...