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. eShopOnContainers 知多少[3]:Identity microservice

    首先感谢晓晨Master和EdisonChou的审稿!也感谢正在阅读的您! 引言 通常,服务所公开的资源和 API 必须仅限受信任的特定用户和客户端访问.那进行 API 级别信任决策的第一步就是身份认 ...

  2. Python爬虫10-页面解析数据提取思路方法与简单正则应用

    GitHub代码练习地址:正则1:https://github.com/Neo-ML/PythonPractice/blob/master/SpiderPrac15_RE1.py 正则2:match. ...

  3. Oracle11g创建表空间、创建用户、角色授权、导入导出表以及中文字符乱码问题

    [转载]原文地址:https://www.cnblogs.com/bjh1117/p/6605037.html 前提:本机已经安装了Oracle11g数据库. 需求:使用PL SQL数据库连接工具操作 ...

  4. pycharm配置运行django项目步骤

    1:在django项目的跟目录下执行:这是直接在Linux系统中直接运行 python manage.py runserver 0:8000 然后在浏览器中输入IP端口即可访问 pycharm配置运行 ...

  5. 从壹开始微服务 [ DDD ] 之三 ║ 简单说说:领域、子域、限界上下文

    前言 哈喽大家好,DDD领域驱动设计系列又开始了,前天周二的那篇入门文章中,也收到了一定的效果(写小说的除外),同时我也是倍感鸭梨,怎么说呢,DDD领域驱动设计已经有十年历史了,甚至更久,但是包括我在 ...

  6. dataframe行变换为列

    新建一个 dataFrame : val conf = new SparkConf().setAppName("TTyb").setMaster("local" ...

  7. SpringBoot技术栈搭建个人博客【前台开发/项目总结】

    前言:写前台真的是我不擅长的东西...所以学习和写了很久很久...前台页面大概开发了两天半就开发好了,采用的静态的html和bootstrap来写,写后台的时候纠结住了...怎么说呢,写页面真的是头疼 ...

  8. SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  9. C# 在PPT中绘制形状(shape)

    概述 本篇文章将介绍C# 在PPT幻灯片中操作形状(shape)的方法.这里主要涉及常规形状,如箭头.矩形.圆形.三角形.多边形.不规则形状等.下面的示例中,可以通过绘制形状,并设置相应格式等.示例包 ...

  10. 大数据---Ranger-1

    背景:从软通出来,告别华为外包,离开H区,进入了一家搞大数据的创业公司,感觉周围都好陌生,记录下自己大数据的career! 2019-03-4新的征程-入职第一天: 一.办理入职手续 公司人比较少,没 ...