spring简介、容器、IOC
对IOC的理解:
在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起,而使用了Spring之后就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A对象需要使用B对象时,Spring就从存放对象的那个容器里面取出A要使用的那个B对象,然后交给A对象使用,至于Spring是如何创建那个对象,以及什么时候创建好对象的,A对象不需要关心这些细节问题(你是什么时候生的,怎么生出来的我可不关心,能帮我干活就行),A得到Spring给我们的对象之后,两个人一起协作完成要完成的工作即可。
所以控制反转IoC(Inversion of Control)是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。
出处:Bromon的blog上对IoC与DI浅显易懂的讲解
框架 软件的半成品 重复使用的代码
## 1、 spring是什么?
是一个开源的用来简化应用开发的框架
### (1)简化开发
spring对常用的api做了封装和简化(比如,对jdbc做了封装,使用spring jdbc来访问数据库,就不再需要考虑获取连接和关闭连接了)
### (2)管理对象
spring提供了一个容器,帮我们创建对象以及建立对象之间的依赖关系。这样做的好处是,降低对象之间的耦合度,方便代码的维护。
### (3)集成其他框架
spring可以将其他的一些框架集成进来(比如,集成用于任务调度的框架Quartz)。即“不发明重复的轮子”
一站式的框架
## 2、spring容器
### (1)spring容器是什么?
spring框架中的一个核心模块,用于管理对象
### (2)启动spring容器
step1.导包(spring-webmvc)
step2. 添加配置文件
step3. 启动spring容器
### (3)如何创建对象?
方式一 使用无参构造器(重点)
step1. 给类添加无参构造器(或者缺省构造器)
step2. 使用<bean>元素
step3. 调用容器的getBean方法来获得对象
方式二 使用静态工厂方法(了解)
通过调用类的静态方法来创建对象
方式三 使用实例工厂方法(了解)
通过调用对象的实例方法来创建对象
### (4)作用域
默认情况下,容器对于某个bean,只会创建一个实例。scope属性:用来配置作用域,缺省值是singleton(即一个bean只创建一个实例)
如果值为prototype(即一个bean会创建多个实例)
### (5)生命周期
初始化 分配资源
销毁 释放资源
初始化方法:<br/>
使用init-method属性来指定初始化方法名
注:spring容器创建对象后,会立即调用初始化方法
销毁方法:<br/>
使用destroy-method属性来指定销毁方法名
注: spring容器在关闭之前,会先销毁对象,在销毁对象之前, 会先调用对象的销毁方法。
只有作用域为单例时,销毁方法才会执行
### (6)延迟加载(了解)
spring容器启动之后会将所有作用域为单例(默认为单例)的bean创建好。<br/>
指定lazy-init属性值为true,此时,spring容器对于作用域为单例的bean,就不会创建相应的实例了。
## 3、IOC(inversion of Controll控制反转)
### (1)IOC是什么?
对象之间的依赖关系由容器来建立</br>
### (2)DI (Dependency Injection 依赖注入)是什么?
容器通过调用对象提供的set方法或者构造器来建立依赖关系。</br>
注:IOC是目标,DI是手段。</br>
### (3)set方式注入
step1. 提供相应的set方法
step2. 配置property元素<property name="" ref=""></property>
### (4)构造器方式注入
step1. 添加相应的构造器
step2. 使用constructor-arg元素
<constructor-arg index="0" ref=""></constructor-arg>
### (5)自动装配(了解)
自动装配,指的是spring容器依据某种规则,自动建立对象之间的依赖关系。
注意:1、默认情况下,容器不会自动装配
2、可以通过autowire属性来告诉容器进行自动装配(容器仍然需要调用
set方法或者构造器来完成依赖关系的建立)
autowire属性:表示让容器自动装配,该属性有如下三个值:
byName:容器依据属性名查找对应的bean,然后调用对应的
set方法来完成注入
注:
1、如果找不到对应的bean,注入null
2、不可能找到多个符合条件的bean
byType:
容器依据属性类型查找对应的bean然后调用对应的set方法
来完成注入
注:
1、如果找不到对应的bean,注入null
2、有可能找到多个符合条件的bean,此时会出错
constructor:
与byType类似,不同的是调用构造器来完成注入
spring简介、容器、IOC的更多相关文章
- 1、Spring简介及IOC入门案例
一.Spring框架介绍 1.介绍 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅仅限于服务 ...
- Unit01: Spring简介 、 Spring容器 、 Spring IOC
Unit01: Spring简介 . Spring容器 . Spring IOC Spring (1)Spring是什么? Spring是一个开源的用来简化应用开发的框架. (2)Spring的特点? ...
- Spring.NET的IoC容器(The IoC container)——简介(Introduction)
简介 这个章节介绍了Spring Framework的控制反转(Inversion of Control ,IoC)的实现原理. Spring.Core 程序集是Spring.NET的 IoC 容器实 ...
- Spring源码-IOC部分-容器简介【1】
实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring ...
- Spring源码-IOC部分-容器初始化过程【2】
实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring ...
- Spring源码-IOC部分-自定义IOC容器及Bean解析注册【4】
实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring ...
- 比Spring简单的IoC容器
比Spring简单的IoC容器 Spring 虽然比起EJB轻量了许多,但是因为它需要兼容许多不同的类库,导致现在Spring还是相当的庞大的,动不动就上40MB的jar包, 而且想要理解Spring ...
- 使用Spring.NET的IoC容器
使用Spring.NET的IoC容器 0. 辅助类库 using System; using System.Collections.Generic; using System.Linq; using ...
- [原创]java WEB学习笔记96:Spring学习---Spring简介及HelloWord
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring简介和基础
Spring介绍 1.什么事Spring? spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. spring的设计模式是单例模式和工厂模式. 2.spring的四大优点 轻量 ...
随机推荐
- iOS开发核心语言Objective C —— 全部知识点总结
本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基 ...
- 获取连接状态数的awk数组命令
awk -n|more zhutianpeng@ztp-OptiPlex-:~/Icpp/server$ netstat -n|more 激活Internet连接 (w/o 服务器) Proto Re ...
- CSDN-markdown编辑器之从线上导入Markdown文件
CSDN-markdown编辑器支持从线上导入Markdown文件的功能,假设你用其他支持Markdown的编辑器在网上写了博客文章或说明档,想公布到CSDN博客中,就能够使用本功能非常方便的完毕 ...
- Node.js 爬虫批量下载美剧 from 人人影视 HR-HDTV
这两天发现了一个叫看知乎的站点.是知乎的苏莉安做的,当中爬虫使用的 Node.js.这里就针对上一篇博客中的美剧小爬虫,改用 nodejs 进行实现一下.体验一下强大的 Node.js. 假设之前没实 ...
- easyUI datagrid组件能否有display:none的隐藏效果
这个项目用了JQ easyUI datagrid 组件,我今天做了一个页面,页面有个div层,div里放了一个easyUI datagrid,页面初始化时div隐藏(display:none),通过点 ...
- iOS UILabel换行同时修改字体大小颜色
UIButton *onlyPriceBtn = [UIButton buttonWithType:UIButtonTypeCustom]; onlyPriceBtn.layer.borderColo ...
- vscode部分文件夹无法打开
vscode部分文件夹无法打开,无法正常显示 解决方案:关闭该IDE.找到C:\Users\XX\AppData\Roaming\Code,将Code文件夹删除.重新打开vsCode,即可恢复.但是以 ...
- HDU3746 Cyclic Nacklace —— KMP 最小循环节
题目链接:https://vjudge.net/problem/HDU-3746 Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) M ...
- POJ3414 Pots —— BFS + 模拟
题目链接:http://poj.org/problem?id=3414 Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- Linux下配置rsync服务器
一.简介 rsync是一个远程数据同步工具,可以快速同步多台主机间的文件.Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都 ...