spring【一】 学习
Spring 源码学习
通过注解的形式注入IOC
- 简单的创建一个maven的项目的
- 下载指定的spring的核心jar包(https://mvnrepository.com/artifact/org.springframework/spring-context/5.1.5.RELEASE,我在下载的是最新的jar包)
- 在maven的pom文件中加入spring坐标,等待文件下载
- 通过spring 的配置文件加载bean
a) 创建spring配置文件的xml,我这里叫做spring.xml
b) 创建一个实体类包含名字、年龄等字段
c) 在spring.xml中注入bean的形式,如下
d) 创建一个Test类以及main方法,通过ClassPathXmlApplicationContext加载spring.xml,在通过getBean的方式在配置的bean就可以获得创建的对象,以及输入对象信息
- 通过spring注解的形式加载bean
a) 创建springConfig的类
b) 通过@Configuration注解标记这个一个配置文件
c) 声明一个实体对象,并返回这个对象,通过@bean注入spring容器当中,如下
d) 通过 AnnotationConfigApplicationContext an = new AnnotationConfigApplicationContext(SpringConfig.class);加载java文件,在通过getBean输出实体对象信息,如下图
- 在注解形式里面,通过@ComponentScan进行注解扫描包结构,@ComponentScan也可以配置一些只引入那些,或者排除那些或者使用@ComponentScans配置多个@ComponentScan,主要是使用@filter进行扫描过滤信息。
a) includeFilters 只包含
- 通过使用typeFilter自定义过滤规则(CUSTOM)
a) 实现typeFilter自定义接口,重新了typeFilter的match方法,match方法包含2个参数(MetadataReader,MetadataReaderFactory)分别的意思是:MetadataReader,读取到当前正在扫描的类的信息;MetadataReaderFactory,可以获取其他的类信息,如下图;
b)
- 使用@scope作用域
a) PROTOTYPE(多实例的),ioc启动并不会调用,而是每次获取的时候调用方法创建对象,多次调用就创建多个对象。
b) SINGLETON(单实例的),ioc启动,调用方法,创建单实例的对象
c) 写法
i. 注解方式:@Scope
ii. 配置文件:在bean标签添加scope属性
- 使用@lazy_bean进行加载
a) 主要针对单实例对象说的,在容器启动时就创建对象。所谓懒加载,就是在容器启动不创建对象,而是在第一次获取的创建对象,以后每次获取就不创建了。
- 使用@conditional 按照条件注册实例
a) @Conditional可以被加在类上或者是方法上
i. 放在类上,不满足则所有的bean都不会加载
ii. 放在方法上,只是针对方法
- 使用@import使用
a) 通过导入的方式实现把实例加入springIOC容器中,直接在spring文件的类型上@import(文件。class)就行,也可以多个({文件。Class,。。})。默认注入的bean是文件的全路径.
b) 使用importSelector,返回需要导入的全路径的数据,如下图
c) 使用ImportBeanDefinitionRegistrar 可以自定义注册bean信息,并且指定bean的定义信息。
- 使用factoryBean 容器工厂。
- 生命周期@bean的初始化和销毁
a) 所谓生命周期就是指的是bean的创建、初始化、销毁的过程。现在是有spring容器管理的,但是我们可以自定义初始化和销毁
i. 初始化和销毁:
- 初始化:对象创建完成,并赋值好,调用初始化方法
- 销毁:单实例,容器关闭是会销毁;多实例,容器不会管理这个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,在创建对象时,底层都是使用后置处理器操作的。如下图
- 使用@profile,spring提供了根据当期环境,动态激活和切换一系列的组件 的功能,比如说,在实际开发过程中我们有开发库、测试库以及生产库,使用profile可以自动的切换数据库源,下图:
可以使用命令行得形式激活测试库或者是开发库
- 第一种方式可以配置-Dspring.profiles.active=Test或者dev
- 第二种方式手动配置运行环境
AOP
a) AOP:在程序运行中动态的将某一段代码切换到指定位置进行运行编程方式
b) AOP主要就是运行日志打印,动态代理模式等
c) 日志打印主要包含前置通知、后置通知、返回通知、异常通知以及环绕通知,对应的注解分别的是@before、@after、@afterreturning、@afterException,在这些通知方法都可以声明JoinPoint 类型的参数,获取方法名和方法参数等。
spring【一】 学习的更多相关文章
- Spring MVC 学习 -- 创建过程
Spring MVC 学习 -- 创建过程 Spring MVC我们使用的时候会在web.xml中配置 <servlet> <servlet-name>SpringMVC< ...
- 《Spring MVC学习指南》怎么样?答:书名具有很大的欺骗性
2016年6月21日 最近,因为工作需要,我从网上买了一本<Spring MVC学习指南>,ISBN编号: 978-7-115-38639-7,定价:49.00元.此书是[美]Paul D ...
- Spring框架学习一
Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...
- Spring security 学习 (自助者,天助之!)
自己努力,何必要强颜欢笑的求助别人呢? 手心向下不求人! Spring security学习有进展哦: 哈哈! 1.页面都是动态生产的吧! 2.设置权限: a:pom.xml配置jar包 b:cr ...
- 转-Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
转-http://snowolf.iteye.com/blog/1628861/ Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariab ...
- 【转】Spring 注解学习手札(超好的springmvc注解教程)
Spring 注解学习手札(一) 构建简单Web应用 Spring 注解学习手札(二) 控制层梳理 Spring 注解学习手札(三) 表单页面处理 Spring 注解学习手札(四) 持久层浅析 Spr ...
- 【转】Spring.NET学习笔记——目录
目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable (转)
最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...
- Spring.NET学习
Spring.NET学习笔记——目录(原) 目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) ...
- Spring.net 学习IOC------属性注入
我们就完成我们的第一个spring.net学习IOC的"hello world!". 1> 我们新建一个C# 的控制台项目名为Spring,然后引入Spring.Core.d ...
随机推荐
- 【Teradata SQL】一个字段为空即取另外一个字段(连续取4个字段)-case when
目标:如果col1为空则取col2的值,如果col2也为空则取col3的值,如果col3还为则取col4的值,如果四个字段均为空则取默认值 1.数据准备 create multiset table t ...
- JS-JSON知识点总结
一.JSON的2个重要方法:JSON.stringify(),JSON.parse() //json转字符串:JSON.stringify() let myJson = { name: 'lizhao ...
- Java Socket聊天室编程(一)之利用socket实现聊天之消息推送
这篇文章主要介绍了Java Socket聊天室编程(一)之利用socket实现聊天之消息推送的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 网上已经有很多利用socket实现聊天的例子了 ...
- Spring 数据库读写分离
读写分离常见有俩种方式 1 第一种方式比较常用就是定义2个数据库连接,一个是Master,另一个是Slave.更新数据时我们取Master,查询数据时取Slave.太过简单不做介绍. 2 第二种方数据 ...
- 【机器学习】--LDA初始和应用
一.前述 LDA是一种 非监督机器学习 技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息.它采用了词袋(bag of words)的方法 ...
- 【Android Studio安装部署系列】二十一、Android studio将项目上传到github中
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 两个相关概念:git和github Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git ...
- SDK测试实践
最近开始接SDK的测试项目,因为之前没有接触过,还是很新奇的,记录一下测试方法. 大家都知道SDK其实就是一个基础工具包,我的理解,对于安卓和IOS来说,SDK就是一个应用程序的基础包,在SDK的基础 ...
- 用消息队列和socket实现聊天系统
前言:最近在学进程间通信,所以做了一个小项目练习一下.主要用消息队列和socket(UDP)实现这个系统,并数据库存储数据,对C语言操作不熟悉的可以参照我的这篇博客:https://www.cnblo ...
- Java进阶篇设计模式之一 ----- 单例模式
前言 在刚学编程没多久就听说过设计模式的大名,不过由于当时还是个彻彻底底的菜鸟,并没有去触碰.直到在开始工作中对简单的业务代码较为熟悉之后,才正式的接触设计模式.当时最早接触的设计模式是工厂模式,不过 ...
- nodejs 开发企业微信第三方应用入门教程
最近公司要开发企业微信端的 Worktile,以前做的是企业微信内部应用,所以只适用于私有部署客户,而对于公有云客户就无法使用,所有就准备开发企业微信的第三方应用,本文主要介绍在调研阶段遇到的山珍海味 ...