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的四大优点 轻量 ...
随机推荐
- [LeetCode][Java] Longest Common Prefix
题目: Write a function to find the longest common prefix string amongst an array of strings. 题意: 写出一个函 ...
- 创建Vue项目的步骤
第一步: 对于要创建项目的工作目录,要先进性管理,命令:npm init -y 第二步: 初始化webpack 包,命令:vue init webpack 自定义名称 第三步: 在components ...
- Mac OS用vmvare安装多节点kubernetes
参考网址 https://kubernetes.io/docs/setup/ 1.安装vmvare 2.下载ubuntu镜像(可以不要界面,可以下载server版大约900M,否则下载desktop版 ...
- java面试题(摘录)
1.抽象,继承,封装,多态 2.基本数据类型的字节数 byte:1.int:4.char:2.long:8.float:4.double:8.boolean:1 和short:2 3.String , ...
- wx.request的并发问题
wepyjs - 小程序组件化开发框架 https://tencent.github.io/wepy/document.html#/ 在同时并发10个request请求测试时: 不使用WePY: 使用 ...
- A JavaScript library for reading EXIF meta data from image files.
exif-js/exif-js: JavaScript library for reading EXIF image metadata https://github.com/exif-js/exif- ...
- 解决ubuntu10.04不能上网
1:命令行输入:lspci查看驱动,最后几行如果有ethernet controller:atheros communications ar8151 v1.0*的话,就说明驱动没有安装好, 2:下载地 ...
- Android 5.x SEAndroid/SElinux内核节点的读写权限【学习笔记】
本文转载自:http://blog.csdn.net/tung214/article/details/44461985 Android 5.0下,因为采取了SEAndroid/SElinux的安全机制 ...
- 织梦文章页调用当前栏目名称和url地址的方法
其实织梦本身有这2个调用标签,可能大家没怎么注意,下面的代码就是织梦文章页调用当前栏目名称和url地址的方法: {dede:field name='typeurl' function=”GetType ...
- html5--6-51 阶段练习3-旋转导航
html5--6-51 阶段练习3-旋转导航 @charset="UTF-8"; ul{ list-style: none; font-size:24px; font-weight ...