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的四大优点 轻量 ...
随机推荐
- Android Auto Scroll ViewPager (Smooth)
项目信息 项目地址 https://github.com/benniaobuguai/android-auto-scroll-viewpager 特性 支持自动平滑切换海报.相册等,无限次循环轮播 手 ...
- MAC Intellij IDEA 经常使用快捷键(本人亲自測试过)
MAC Intellij IDEA 经常使用快捷键 keymap 设置 MAC OS X 10.5+ alt+f7查找变量方法使用的地方 F3加入书签 Ctrl + O快捷覆写方法 Alt + F3 ...
- openwrt hotplug
由内核发出 event 事件. kobject_uevent() 产生 uevent 事件(lib/kobject_uevent.c 中), 产生的 uevent 先由 netlink_broadca ...
- 4. 基本TCP套接字编程
基本函数接口 socket函数 #include <sys/socket.h> int socket(int family, int type, int protocol); 成功时返回一 ...
- (转)CSS3全局实现所有元素的内边距和边框不增加
全局设置 border-box 很好,首先它符合直觉,其次它可以省去一次又一次的加加减减 它还有一个关键作用——让有边框的盒子正常使用百分比宽度.但是使用了 border-box 可能会与一些依赖默认 ...
- 理解和使用WPF 验证机制
博客 学院 下载 更多 写博客 发布Chat 登录注册 理解和使用WPF 验证机制 原创 2013年06月20日 11:15:37 7404 首先建立一个demo用以学习和实验WPF Data Val ...
- 减肥 day1
今天是我减肥第一天,现在体重是147斤, 早晨吃了一碗面,喝了一碗奶,中午吃了一个apple. 6点钟去打篮球,晚上去食堂稍微吃一点东西.
- java8--面向对象 下(疯狂java讲义3) 复习笔记
1.如果一个包装类和一个基本类型比较大小,或者是两个基本类型进行比较大小,直接用==就好: 如果是两个包装类进行比较大小,那么使用equals(),返回值是true,false,或者使用Xxx.com ...
- EhCache+Redis实现分布式缓存
Ehcache集群模式 由于 EhCache 是进程中的缓存系统,一旦将应用部署在集群环境中,每一个节点维护各自的缓存数据,当某个节点对缓存数据进行更新,这些更新的数据无法在其它节点中共享,这不仅会降 ...
- eclipse创建maven项目出现以下报错: org.apache.maven.archiver.MavenArchiver.getManifest (org.apache.maven.project.MavenProject,org.apache.mav en.archiver.MavenArchiveConfiguration)
解决方法: 更新eclipse中的maven插件 Help -> Install New Software -> add -> http://repo1.maven.org/ma ...